IPv6 - XiZi's Blog
DIR615 F/W:C2+OpenWrt 上 六维
处于内网,又恋上了“六维”的资源,没办法。想办法。偶然发现当初买的Dlink Dir615C2,当时它的ipv6害得我很是苦恼,手机用wifi通过路由器上网,一会儿就不能上了。后来刷了DD-Wrt,没了ipv6,这个世界清净了。手机上网也正常了。可是我的六维也上不了。后来发现了gw6c这个软件,装在电脑上,还行,挺方便。不过偶然发现原来OpenWrt支持gw6c,又开始折腾,还好现在能上了。总结一下大体步骤。
1、刷OpenWrt,在OpenWrt的官方网站down一个对应的刷机bin文件,我down的是(目前最新)的10.3.1-rc4下面,给个网址参考(http://downloads.openwrt.org/backfire/10.03.1-rc4/ar71xx/),新版本的可能会不同。下载openwrt-ar71xx-dir-615-c1-squashfs-factory.bin文件。
2、刷入下载的文件。只有一种方式,就是进入dlink的恢复出场设置界面:拔掉路由器(DIR615C2,以下所受哦路由器特指这个)的电源,用笔、螺丝刀等物“按住”电源旁边的reset键,插上电源,一直等,大概30秒左右松开就可一了,这时候,可以看到路由器的电源指示灯呈橘黄色闪烁。说明进入了恢复固件的模式。修改你的电脑的ip地址为192.168.0.2(和路由器统一网段皆可,即最后一个数字2可以是2~254的任何数)。打开浏览器,输入192.168.0.1,你会看到刷固件的页面,浏览,选择下载的openwrt固件,发送,等待。页面会有动态提示,但那个不是很准。
3、大概3-5分钟后,把电脑的ip调成“自动获取”ip地址,如果获取地址成功,说明你的OpenWrt刷入成功。登录192.168.1.1注意和Dlink的地址(192.168.0.1)是不一样的。进行相关的网络设置。
4、安装gw6c组件,在网页的Administration->System->SoftWare, 打开软件管理页面,“Update package lists” 更新软件列表。在更新后的列表里,点gw6c前面的“Insall”进行安装,会安装gw6c依赖的必要组建。至此路由器的软件安装完成。
5、配置gw6c,在Administration->Service->InitScript, 里面打开gw6c使其处于enable状态。telnet到路由器(xp自带,vista和win7推荐使用putty软件),vi /etc/config/gw6c 修改成如下:
config gw6c basic
#Comment out next line to enable gw6c #option disabled 1 #Leave empty if connecting anonymously option userid username# 你注册gogonet6用户名 option passwd p@ssw0d# 密码 #For anonymous use anon.frenet6.net and #account holders should use broker.freenet6.net option server authenticated.freenet6.net #auth_method <anonymous|any|passds-3des-1|digest-md5|plain> #Use anonymous with anonymous access and #any if you are account holder option auth_method any config gw6c routing #host_type <host|router> option host_type router option prefixlen 56 option ifprefix br-lan #DNS server list to which the reverse prefix #will be delegated. Separate servers with : option dns_server 2001:470:20::2 config gw6c advanced #Location where to store configuration file option gw6c_conf /tmp/gw6c.conf option gw6c_dir /usr/share/gw6c option auto_retry yes option retry_delay 30 option keepalive yes #keepalive interval option interval 30 #tunnel_mode <v6v4|v6udpv4|v6anyv4|v4v6> option if_tunnel_mode v6anyv4 option if_v6v4 sit1 option if_v6udpv4 tun option if_v4v6 sit0 option client_v4 auto option client_v6 auto option template openwrt option proxy_client no config gw6c broker option broker_list /tmp/gw6c-broker-list.txt option last_server /tmp/gw6c-last-server.txt # Always use last known working server? <yes|no> option always_same_serv no config gw6c logging option log_console 0 option log_stderr 1 option log_file 0 option log_syslog 0 option log_filename /var/log/gw6c.log option log_rotation yes #Max size when using log file rotation #possible values: 16|32|128|1024 option log_maxsize 32 #<USER|LOCAL[0-7]> option syslog_facility USER
以上设置完成,基本上就可以了。
P.S.: 刷完OpenWrt后,路由器的Led灯是不亮的,可以在System的Led里面设置。怎么设置?来张图吧
P.S.:为什么我还是连不上ipv6?检查过程,检查路由器的ipv6联通状态。用putty,ssh到路由器,ping ipv6.google.com,如果能够正常,说明路由器的ipv6链接正常。否则,说明你的gw6c连接的服务器有问题,请重新启动gw6c服务(/etc/init.d/gw6c restart)。期待能够正差吧,这个跟rp可能有点关系。不用瞎试验别的东西,没用!OpenWrt官方的ipv6_HowTo, 的关于iptables的设置在我们这儿是不需要的。如果多次都不行,尝试重启路由器,或者,换其他时间段再试。
修改pam_mysql的源代码,让他支持ipv6.
配置了vsftp+pam_mysql+mysql的虚拟用户管理系统。但学校的ipv6网络,人家用ipv6访问的时候不能准确记录其ip地址。遂down了pam_mysql的源代码,改之。基于尽量少的改动原有文件的原则。添加了部分代码。现在ok了。下面给大家说说具体修改过程。
1. 当然是下载源代码了。
在你能有写权限的目录,比如 /home/you/ 建立工作目录如:mysql-pam 并进入
cd pam-mysql
apt-get source libpam-mysql
将会得到以下文件
pam-mysql-0.6.2 pam-mysql_0.6.2-1.dsc
pam-mysql_0.6.2-1.diff.gz pam-mysql_0.6.2.orig.tar.gz
2. 修改pam_mysql.c
ado@www:~/mysql-pam/pam-mysql-0.6.2$ vim pam_mysql.c
第1753行,原文件为:
syslog(LOG_AUTHPRIV | LOG_CRIT, PAM_MYSQL_LOG_PREFIX "allocation failure at " __FILE__ ":%d", __LINE__);
return PAM_MYSQL_ERR_ALLOC;
}
修改为:
syslog(LOG_AUTHPRIV | LOG_CRIT, PAM_MYSQL_LOG_PREFIX "allocation failure at " __FILE__ ":%d", __LINE__);
return PAM_MYSQL_ERR_ALLOC;
}
给remote_host变量足够的存储空间。
从1752行开始田间如下能容:
struct sockaddr_in6 client_address;
int salen6=sizeof(client_address);
if (!getpeername(0, (struct sockaddr *) &client_address, &salen6))
{
char inet[64]="no ip is 2001:0da8:a800:0000:0000:0000:0000:0000 has nothing to do";
inet_ntop(AF_INET6,&(client_address.sin6_addr),inet,strlen(inet));
sprintf(remote_host,"%s",inet);
}
//strcpy(remote_host, "(unknown)");注释掉原来的操作
//下面的代码不变
3. 好了,重新编译吧
make
sudo make install
# 默认会安装到 /usr/lib/security/里面。
# 建个软连接
ln -s /usr/lib/security/pam_mysql.so /lib/security/pam_mysql.so