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里面设置。怎么设置?来张图吧

       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  并进入

mkdir pam-mysql
cd pam-mysql
apt-get source libpam-mysql

将会得到以下文件

ado@www:~/mysql-pam$ ls
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$ cd pam-mysql-0.6.2/
ado@www:~/mysql-pam/pam-mysql-0.6.2$ vim pam_mysql.c
 

 

第1753行,原文件为:

        if (NULL == (remote_host = xcalloc(16, sizeof(char)))) {
                syslog(LOG_AUTHPRIV | LOG_CRIT, PAM_MYSQL_LOG_PREFIX "allocation failure at " __FILE__ ":%d", __LINE__);
                return PAM_MYSQL_ERR_ALLOC;
        }
 

修改为:

        if (NULL == (remote_host = xcalloc(255, sizeof(char)))) {
                syslog(LOG_AUTHPRIV | LOG_CRIT, PAM_MYSQL_LOG_PREFIX "allocation failure at " __FILE__ ":%d", __LINE__);
                return PAM_MYSQL_ERR_ALLOC;
        }
 

 

给remote_host变量足够的存储空间。

 

从1752行开始田间如下能容:

                sprintf(remote_host,"%s","unknown");
                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. 好了,重新编译吧

./configure  !如果提示找不到什么“mysql_config”就安装这个包"libmysqlclient15-dev"

make

sudo make install

# 默认会安装到 /usr/lib/security/里面。
# 建个软连接

ln -s /usr/lib/security/pam_mysql.so /lib/security/pam_mysql.so

 




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee