只要你的路由器可以刷机为openwrt,就可以安装本文实现IPv6网络共享

2017年7月19日4130

 

目的:
1. 路由器配置isatap ipv6,并使路由器后的客户端可以使用ipv6,然后扔掉goagent用ipv6 hostsFQ。
2. 路由器做vpn服务器,在大运村实现通过vpn连接实验室的路由器免费上网。

第2条说免费上网,其实也不算完全免费,因为实验室的IP是掏了钱的。(又不是我掏,嘿嘿)
其他免费上网方式可以利用ipv6+goagent绕过认证。(这种方法我没试过而且不知道花园能不能发,大家自己搜吧)

步骤:

一、路由器基本配置

1. 首先给路由器刷机,我刷的是openwrt,下载地址:http://downloads.openwrt.org/snapshots/trunk/ ,根据自己路由器的cpu型号选择合适的固件。
我用的是这个 http://downloads.openwrt.org/snapshots/trunk/ar71xx.nand/openwrt-ar71xx-nand-wndr3700v4-ubi-factory.img
注意这里用的是trunk版,如果你的路由器型号有stable版的固件,最好选用bug比较少的stable版固件。
如果刷机失败不小心变砖,可以用tftp方法刷入从官网下载的原厂固件救砖。之前选wndr3700v4的一个原因就是这货号称刷不死。
2. 刷入openwrt之后默认是没有web管理界面也没有密码的,而且WiFi功能默认关闭。
(1)首先下载putty和pscp。
(2)用putty telnet到192.168.1.1,给root设置密码。

passwd root

(3)断开,然后ssh到192.168.1.1。
(4)总之先把路由器连上网再说,vim编辑/etc/config/network,然后重启network。

config interface 'wan'

        option ifname 'eth0.2'

        option proto 'static'

        option ipaddr '你的IP'

        option netmask '255.255.255.128'

        option gateway '你的网关'

        option dns '202.112.137.209'

ps: 我的掩码是28位的。
(5)修改okpg更新源,vim编辑/etc/opkg.conf,第一行改为

src/gz barrier_breaker http://downloads.openwrt.org/snapshots/trunk/ar71xx.nand/packages

(6)安装luci

opkg update

opkg install luci

现在再在浏览器输入192.168.1.1就可以进入web管理界面了。

二、配置isatap

由于isatap是通过一台服务器将IPv6封装进IPv4数据包,一个公共IPv4地址只能对应一个IPv6地址。
路由器的IPv4是用NAT实现共享上网的,但是IPv6协议是没有NAT的。

这样只能让路由器获得IPv6地址,但是路由后面的设备不能使用IPv6;或者也可以设置41端口转发,使路由后的某一台设备使用IPv6。
因此要使多个设备都能使用isatap有两种方法。
网上搜索的结果,其中一种方法是使用北邮的napt66,http://www.right.com.cn/forum/thread-48021-1-1.html
本文是另一种方法,采用ip6tables的nat表和radvd,参考了这篇文章 https://blog.blahgeek.com/2014/02/22/openwrt-ipv6-nat/

1. 我们用的是isatap隧道,如果你的固件集成了miredo(teredo隧道),关掉它。或者直接卸载掉miredo包。

/etc/init.d/miredo stop

/etc/init.d/miredo disable

2. 关掉wan6接口,vim编辑/etc/config/network

config interface 'wan6'

        option auto '0'

3. 安装必要的包

opkg install ip6tables kmod-ip6tables kmod-ipt-nat6 kmod-sit radvd

4. 为路由器lan口指定IPv6地址,vim编辑/etc/config/network,并重启network。

config interface 'lan'

        option ip6assign '64'

        option ip6addr 'fc00:0101:0101::1/64'

5. 配置radvd,广播fc00:0101:0101::/64网段的私有IPv6地址(相当于IPv4的DHCP),编辑/etc/config/radvd

config interface

        option interface        'lan'

        option AdvSendAdvert    1

        option AdvManagedFlag   0

        option AdvOtherConfigFlag 0

        option MinRtrAdvInterval 5

        option MaxRtrAdvInterval 10

        option AdvDefaultPreference high

        option ignore           0


config prefix

        option interface        'lan'

        list prefix             'fc00:0101:0101::/64'

        option AdvOnLink        1

        option AdvAutonomous    1

        option AdvRouterAddr    1

        option ignore           0

编辑完之后

/etc/init.d/radvd enable

/etc/init.d/radvd start

6. 配置防火墙,编辑/etc/firewall.user,加入下面的内容,重启firewall。

ip6tables -t nat -I POSTROUTING -s fc00:0101:0101::/64 -j MASQUERADE

7. 最后,配置路由器isatap,touch新建一个/etc/init.d/isatap文件,输入以下内容

#!/bin/sh /etc/rc.common 


# before led, after everything else 

START=95


start() {

    ip tunnel add sit1 mode sit remote 219.224.165.235 local 你的IP

    ifconfig sit1 up

    ifconfig sit1 add fe80::200:5efe:你的IP/64

    ifconfig sit1 add 2001:da8:203:666:200:5efe:你的IP/64

    ip route add ::/0 via 2001:da8:203:666:200:5efe:219.224.165.235 metric 1

}


stop() {

    ip tunnel del sit1

}

我是固定IP,配置起来so easy,妈妈一点都不担心。如果你是动态IP,在上面的脚本里start()中加入

myip=$(ifconfig|grep -A2 'eth0.2'|grep 'inet addr:'|cut -d: -f2|awk '{print $1}')

然后将“你的ip”全部换为$myip。

其中219.224.165.235是学院路isatap路由器地址,2001:da8:203:666:200:5efe是通过PC直接接入网口配置isatap得到的IPv6地址前缀,然后

chmod 755 /etc/init.d/isatap

/etc/init.d/isatap enable

/etc/init.d/isatap start

8. 上面的步骤做完之后,将PC的本地连接禁用再启用,稍等片刻,你应该就可以获取到radvd分配的IPv6地址了。然后ping一下试试。

ping 2001:da8:203:777::1

ping ipv6.buaabt.cn


成功!咩哈哈~

接下来,就可以下载ipv6-hosts文件进行替换了:https://ipv6-hosts.googlecode.com/hg/hosts这个文件好像很久没更新了,需要自己修改一下:

全局替换
google 2404:6800:4005:前缀换为2404:6800:4003:
facebook 2a03:2880:10:6f08:前缀换为2a03:2880:f011:301:

我只改了这两个,其他的可以自己尝试修改~
PS: hosts文件也可以在路有器上进行配置

config dnsmasq

        list addnhosts '/etc/hosts'

三、配置vpn服务器

vpn服务器的搭建有好几种选择:IPsec、PPTP和OpenVPN等。
这里选择了OpenVPN,参考资料http://wiki.openwrt.org/oldwiki/vpn.server.openvpn.tunhttp://wiki.openwrt.org/doc/howto/vpn.openvpn
1. 首先安装必要的包

opkg install openvpn-openssl openvpn-easy-rsa

2. 修改easy-rsa的变量,vim编辑/etc/easy-rsa/vars

export KEY_SIZE=1024

export KEY_COUNTRY="CN"

export KEY_PROVINCE="BEIJING"

export KEY_CITY="Beijing"

export KEY_ORG="LongLiveBUAA"

export KEY_EMAIL="[email protected]"

export KEY_OU="MyOrganizationalUnit"

我将key size设置为了1024,目的是为了加快生成速度,而且安全性也足够,初始是2048。
3. 清除之前所有的证书

clean-all

4. 生成ca,server证书。(这里不生成client证书,因为我采用的是ca+user/passwd的认证方式。如果你想采用ca+client证书的方式,请参考wiki。)

build-ca

build-key-server

5. 生成dh

build-dh

6. 将生成的文件复制到/etc/openvpn/

cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn/

7. 修改/etc/config/openvpn

config openvpn custom_config

        option enabled 1

        option config /etc/openvpn/my-vpn.conf

8. touch新建一个文件/etc/openvpn/my-vpn.conf,输入以下内容

local 219.224.XXX.YYY #你的ip

mode server

tls-server


port 1194

proto udp

dev tun


ca /etc/openvpn/ca.crt

cert /etc/openvpn/server.crt

key /etc/openvpn/server.key

dh /etc/openvpn/dh1024.pem


server 10.8.0.0 255.255.255.0


push "redirect-gateway def1"

push "dhcp-option DNS 192.168.1.1"

push "route 192.168.1.0 255.255.255.0"


status /var/log/openvpn-status.log

log /var/log/openvpn.log


persist-key

persist-tun


keepalive 10 120

comp-lzo no

verb 3


script-security 3 #不加这个属性会造成认证失败

auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env

client-cert-not-required

username-as-common-name

openvpn有两种模式:tap和tun。我选了tun,因为搭vpn服务器的主要目的是为了我的手机(Android),而Android是不支持tap的。
协议有两种tcp和udp,我选择了udp。port端口默认为1194,可以修改为自己指定的端口。
comp-lzo是压缩选项,我把压缩关了,目的是为了加快访问速度。
script-security 必须要设置比2大的值,否则checkpsw.sh脚本会执行出错。
checkpsw.sh脚本是用来验证text密码的,内容如下:

#!/bin/sh

###########################################################

# checkpsw.sh (C) 2004 Mathias Sundman <;[email protected]> 

#

# This script will authenticate OpenVPN users against

# a plain text file. The passfile should simply contain

# one row per user with the username first followed by

# one or more space(s) or tab(s) and then the password.


PASSFILE="/etc/openvpn/psw-file"

LOG_FILE="/var/log/openvpn-password.log"

TIME_STAMP=`date "+%Y-%m-%d %T"`


###########################################################


if [ ! -r "${PASSFILE}" ]; then 

  echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >;> ${LOG_FILE} 

  exit 1

fi


CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}` 


if [ "${CORRECT_PASSWORD}" = "" ]; then 

  echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >;> ${LOG_FILE} 

  exit 1

fi


if [ "${password}" = "${CORRECT_PASSWORD}" ]; then 

  echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >;> ${LOG_FILE} 

  exit 0

fi


echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >;> ${LOG_FILE} 

exit 1

不要忘记修改文件属性

chmod 755 /etc/openvpn/checkpsw.sh

9. 新建文件/etc/openvpn/psw-file,按USER [TAB] PASSWORD格式输入用户名和密码。

user        passwd

test        test

10. 修改防火墙,vim编辑/etc/firewall.user

iptables -t nat -A prerouting_rule -p udp --dport 1194 -j ACCEPT

iptables -A input_rule -p udp --dport 1194 -j ACCEPT


iptables -I INPUT -i tun+ -j ACCEPT

iptables -I FORWARD -i tun+ -j ACCEPT

iptables -I OUTPUT -o tun+ -j ACCEPT

iptables -I FORWARD -o tun+ -j ACCEPT

11. 最后,重启各服务。

/etc/init.d/openvpn enable

/etc/init.d/openvpn start

/etc/init.d/firewall restart

 

12. 输入ps命令查看openvpn是否启动成功,如果看到如下内容

1246 root      4196 S    /usr/sbin/openvpn --syslog openvpn(custom_config) --cd /etc/openvpn --config my-vpn.conf

那么代表启动成功。
在第8步中,我们配置了log文件。如果启动失败,可以查看日志诊断错误。

cat /tmp/log/openvpn.log

13. 客户端新建文件client.ovpn,输入以下内容

client

tls-client

dev tun

proto udp


remote 219.224.XXX.YYY 1194 #路由器wan口ip


resolv-retry infinite

nobind


ca ca.crt


comp-lzo no

persist-tun

persist-key

verb 3


auth-user-pass

14. 客户端使用教程
(1) 安装openvpn,ios和android都有相应的软件。
(2) 将ca.crt和client.ovpn放入手机中的某个目录。
(3) 在openvpn中选择Import导入配置client.ovpn
(4) 输入管理员为你分配的账号和密码,点Connect。

我配置的过程中遇到的最多的错误(Windows客户端)就是证书错误

TLS_ERROR: BIO read tls_read_plaintext error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

搜索得知是vpn服务端和客户端时间不一致。
我将openwrt修改为东八区后校准时间还是解决不了。好在手机完全正常,我也就没再管。
从上图可以看出Protocol为UDPv4,是没法用IPv6的,这个问题我还没开始搞,回头搞定了更新帖子。

我在文章最前面特意提到这个路由器有一个usb接口,可以接移动硬盘给路由器安装transmission,然后挂BT哦~

0 0