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

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