XiZi's Blog
配置OpenWRT 校园网实现 IPv4 over IPv6。
目前网络状况:两个位置:位置1和位置2,位置1可以正常访问IPv6网络(校内和校外),位置2可以访问IPv6和IPv4网络。
目的:实现位置1处无差别上网,即正常访问IPv4和IPv6网络,关键是IPv4。
基本原理:通过openvpn路由所有的IPv4数据给远程电脑。
基础设施:位置1处路由器(mdir-615),位置2处做好路由和openvpn()监听IPv4和IPv6地址。
1、基础准备。配置位置2处的电脑,做好openvpn服务器,使用正常的客户端测试openvpn的连通性。网上教程很多,这里不做具体说明了。
2、路由的openwrt配置。这里使用我的DLink dir615 为例说明。
1)刷openwrt,这里需要提到一点,我的dir615刷openwrt,ie11和chrome都不能刷,下了个firefox4可以。
2)安装必备的软件包,由于我的dir615闪存只有4m,所以都不能安装图形界面,还有后面选择polarssl和popenvpn-polarssl,也是次原因,完全命令行操作。必备的软件包有: kmod-tun,liblzo,libpolarssl,openvpn-polarssl。
3)配置
(1)配置/etc/config/system
config system option hostname OpenWrt #路由器的名称 option timezone CST-8 #时区,这个就是Asia/Chongqing,也就是中国的时区。 config 'led' 'wlan_led' #这个是我的dir615配置无线led灯的 option 'name' 'WLAN' option 'sysfs' 'd-link:green:wlan' option 'trigger' 'netdev' option 'dev' 'wlan0' option 'mode' 'link tx rx' config 'led' 'wan_led' #段配置wan口led灯 option 'name' 'WAN' option 'sysfs' 'd-link:green:wan' option 'trigger' 'netdev' option 'dev' 'tun0' option 'mode' 'link tx rx'
(2)配置/etc/config/network
config interface 'wan' option ifname 'eth1' #指定wan口网卡 option proto 'none' #这个地方配置修改为none,我们不需要ipv4网络 option macaddr '00:24:01:76:B2:27' #这句指定wan口的mac地址。 config interface 'ovpn' #这段内容是我们增加的,为后续的防火墙做准备。 option ifname 'tun0' #openvpn使用的interface名称 option proto 'none' #这里也不用配置,他的网络是由程序配置的。
(3)配置/etc/config/firewall
#对wan区域增加我们配置的openvpn,ovpn我们上面刚配置的名字。 config zone option name wan list network 'wan' list network 'wan6' list network 'ovpn' #增加这一行把openvpn增加的wan区域里面,否则即使你连接上了,路由器可以正常上网,但局域网客户端不能上。 option input REJECT option output ACCEPT option forward REJECT option masq 1 option mtu_fix 1
(4)配置dns解析服务,这里我们修改/etc/dnsmasq.conf
#在文件尾部增加DNS服务器,越靠下优先级越高 server=2001:4860:4860::8844 # google ipv6 public dns server=2001:4860:4860::8888 # 同上 server=xxx.xxx.xxx.xxx # 学校IPv4 DNS
(5) 关于openvpn的配置,由于我们没有IPv4网络,redirect gateway回出现错误失效,我们手动添加路由即可。 /etc/config/openvpn
config openvpn sample_client # Set to 1 to enable this instance: option enabled 1 .... #插入以下段到你配置的openvpn client 配置部分 list route "0.0.0.0 0.0.0.0"
(6)顺便把无线的配置也贴出来吧。/etc/config/wireless
config wifi-device radio0 option type mac80211 option channel 11 option hwmode 11ng option path 'platform/ath9k' list ht_capab SHORT-GI-40 list ht_capab DSSS_CCK-40 option htmode HT20 # REMOVE THIS LINE TO ENABLE WIFI: # option disabled 1 #注意这里原来是没有前面那个#的 config wifi-iface option device radio0 option network lan option mode ap #无线工作模式,ap路由,sta客户端 option ssid myssid #OpenWrt #默认是OpenWrt改为你想要的名字 option encryption psk2 #none #默认是none改为你想要的加密方式,psk,psk2,wep等 option key password #当然是密码喽。
修改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