用路由器连上 IPv6 网络
用路由器连上 IPv6 网络
用路由器连上 IPv6 网络
本教程极其适用于华中科技大学的学生,为了在华科用上 IPv6 我也是焦头烂额了一周。 对于其他地方的人群,本文具有一定参考价值。
华科的 IPv6 首先它并不免费,按网络中心的说法如果你使用 ipv6 他会奖励你两周。这个奖励我呵呵一笑。
电脑上可以轻而易举用上IPv6网络,请自行寻找方法。
到目前为止(2017-04-13),华科大部分地方的无线网均会给你的终端分配IPv6地址,但是除了刚刚装上无线网不久的宿舍片区,其他地方你基本连不上IPv6。我科就是这么神奇,不知道这个BUG要多久才能修复。
本人试过极路由自带的 IPv6 插件和华硕固件,均没有成功。望在这两个环境下成功了的人告诉我搭建方法,本人不胜感激!
路由器环境 OpenWrt15,刷机方法请自行搜索。或者等我心情好的时候贴出。
安装 mentohust
这个软件用来解决锐捷登录的问题。我用的是该版本的软件 大家可以按照教程自己编译一下。 需要注意的是,在Linux环境中编译的文件不一定能在OpenWrt中跑,需要交叉编译才能保证软件的正常运行。 交叉编译:在这里的意思是模拟OpenWrt中的环境对源码进行编译,保证软件的正常运行。
但是我在编译中遇到了一些玄学上面的问题,编译不成功。由于我的路由器是 MT7620CPU 的路由,所以我从网上找到一个在该环境下编译成功的 mentohust 上传到路由器当中。下载地址
建议大家看看 mentohust 的使用说明后再进行配置。华科的在连上路由器并上传完 mentohust 后,在 /etc/mentohust.conf/
填入如下信息
[MentoHUST]
Username=校园网
Password=登录密码
Nic=eth0.2 #这个具体看网卡
IP=0.0.0.0
Mask=0.0.0.0
Gateway=0.0.0.0
DNS=0.0.0.0
PingHost=0.0.0.0
Timeout=8
EchoInterval=30
RestartWait=15
MaxFail=8
StartMode=0
DhcpMode=2
DaemonMode=2
ShowNotify=0
Version=0.00
DataFile=/etc/mentohust/
dhcpscript=nil
再启动 mentohust 就可以登录校园网了。
mentohust 开机启动
在 /etc/init.d/
新建 mentohust 文件,内容为
#!/bin/sh /etc/rc.common
# /init.d/mentohust
START=99
STOP=10
start()
{
/root/mentohust
}
stop()
{
/root/mentohust -k &
}
restart()
{
stop
start
}
保存并修改文件权限为755 建立软连接
ln -s /etc/init.d/mentohust /etc/rc.d/S99mentohust
##配置IPv6 由于华科是认证后才有的 IPv6 地址,因此设置不像无需认证的简单。 虽然IPv6不倡导一种用 NAT 内网转发,但是在华科我还没见到用其他方法能行的。
大家参考这篇文章即可,写的很详细。
后面是这篇博客的本地实现版。
下面的是在路由器 web 中实现的方法,ssh后台登录配置也可以实现。
在系统->网络中搜索 ip6tables、kmod-ipt-nat6这两个包,如果没有安装,则搜索安装。
网络->接口:清空IPv6 ULA-Prefix一栏,保存&应用。
这会删除 /etc/config/network
中 config globals 'globals'
下的 option ula_prefix
条目
网络->接口->WAN:设置你的IPv4外网接口参数。华科童鞋不用MAC绑定不用管。 WAN口其他参数依据你的网络配置。 保存&应用
网络->接口->WAN6:设置你的IPv6外网接口参数。
去掉“使用端局通告的DNS服务器”,填入学校的支持IPv6的DNS服务器,或者用下面的DNS服务器:
Google:2001:4860:4860::8888 2001:4860:4860::8844 HE.net DNS:2001:470:20::2 OpenDNS:2620:0:ccc::2 2620:0:ccd::2
保存&应用
这会在 /etc/config/network
中 config interface 'wan6'
下添加 option dns '2001:4860:4860::8844 2620:0:ccd::2 2001:470:20::2'
条目
网络->接口->LAN,禁用 IPv6 assignment length(让 odhcpd 分配 IPv6 地址)
IPv6地址填写:AAAA:BBBB:CCCC:DDDD::1/64(这个内网地址可以随便改A:B:C:D::1/64也行)
IPv6 Routed Prefix:AAAA:BBBB:CCCC:DDDD::/64(上边的地址去掉末尾的1)
这会在 /etc/config/network
中 config interface 'lan'
下添加 option ip6addr 'aaaa:bbbb:cccc:dddd::1/64'
和 option ip6prefix 'aaaa:bbbb:cccc:dddd::/64'
条目
勾选下方Always announce default Router
这会在 /etc/config/dhcp
中 config dhcp 'lan'
下添加 option ra_default '1'
条目
DHCPv6-Mode 改为 Stateful-only(关闭内网 SLAAC,简化网络,此项可以不做)
这会在 /etc/config/dhcp
中 config dhcp 'lan'
下 修改 option ra_management
参数为’2’
保存&应用
网络->防火墙->通信规则:取消最后一项 Allow-ICMPv6-Forward 的勾选。避免不必要的ICMPv6转发。
保存&应用
这会在 /etc/config/firewall
中 Allow-ICMPv6-Forward
规则下添加 option enabled '0'
条目
系统->启动项:填写修改后的启动脚本,本文最后贴出。该脚本负责添加 NAT 的防火墙伪装和 IPv6路由表。 提交。
脚本会被写入到/etc/rc.local
中
注意:此脚本开机尝试99次获取wan口IPv6地址,若失败则不再添加IPv6路由表。
启动脚本:
#!/bin/sh /etc/rc.common
# NAT6 init script for OpenWrt // Depends on package: kmod-ipt-nat6 ip6tables tracepath6
# Ref: https://wiki.openwrt.org/doc/howto/ipv6.nat6
MAX_TRIES=99
WAN6_NAME="wan6"
#eth0.2 by default
WAN6_INTERFACE=$(uci get "network.$WAN6_NAME.ifname")
#e.g. aaaa:bbbb:cccc:dddd::/64
LAN_IP6PREFIX=$(uci get network.lan.ip6prefix)
#e.g. ddc2:d512:65f5::/48
#LAN_ULA_PREFIX=$(uci get network.globals.ula_prefix)
PROBE=0
COUNT=1
while [ $PROBE -eq 0 ]
do
if [ $COUNT -gt $MAX_TRIES ]
then
logger -t NAT6 "No IPv6 route found (reached retry limit $MAX_TRIES times)" && exit 1
fi
sleep 5
logger -t NAT6 "Probing IPv6 route ($COUNT time)"
COUNT=$((COUNT+1))
PROBE=$(route -A inet6 | grep -c '::/0')
done
#ip6tables -t nat -I POSTROUTING -s "$LAN_ULA_PREFIX" -o "$WAN6_INTERFACE" -j MASQUERADE
ip6tables -t nat -I POSTROUTING -s "$LAN_IP6PREFIX" -o "$WAN6_INTERFACE" -j MASQUERADE
#WAN6_GATEWAY=$(route -A inet6 -e | grep "$WAN6_INTERFACE" | awk '/::\/0/{print $2; exit}'
#get gateway from routing table. !!!Caution!!! May not work !
WAN6_GATEWAY=$(ifconfig eth0.2 | grep 'Global' | awk '{print $3}'| awk -F':' '{print $1":"$2":"$3":"$4"::1"}')
#caculate gateway from wan ipv6
#WAN6_GATEWAY=$(tracepath6 -n tv.byr.cn | grep ' 1: ' | awk 'NR==1 {print $2}')
#opkg install iputils-tracepath6 . change tv.byr.cn for faster site. e.g. ipv6.bjtu.edu.cn
#route -A inet6 add 2000::/3 gw "$WAN6_GATEWAY" dev "$WAN6_INTERFACE"
route -A inet6 add default gw "$WAN6_GATEWAY" dev "$WAN6_INTERFACE"
logger -t NAT6 "Done with IPv6 settings"
exit 0