西北工业大学校园网openwrt(LEDE)固件下IPv6 NAT
小小改动一下。 学校的校园网之前使用锐捷,不需要认证即可获得IPv6地址,当时采用6relayd直接转发,中继等方法让终端设备都是可行的,上学期网络改造更换成深澜认证后,需要PPPoE拨号才能获得IPv6地址。之前使用hiboyhiboyhiboy大大的Padavan固件利用napt66让路由器后端获取了IPv6,最近换了个路由器刷上LEDE,摸索了很久之后,终于尝试出我们这个网络环境下使用IPv6 NAT方式让后端设备获得了IPv6网络访问权限的方法,连着路由器挂PT方便了很多~
下面是我的步骤:1、 网络->接口->WAN6按下面的图设置,应用,再插网线,方便WAN端口获取到IPv6地址:
然后在WAN端口中切换PPPoE协议,填入账号密码拨号联网。
2020年6月更新:如果你在这一步碰到了玄学,死活获取不了,请参照OpenWrt官方教程:OpenWrt Project: IPv6中的 Native IPv6 connection 和 PPP-based protocols and option ipv6 ,修改network和firewall配置文件,如图所示:
在OpenWrt 19.07版本下我做出了如下修改后成功获得v6地址。
2、查看/lib/modules/$(uname -r)/文件夹中查看是否存在与ipv6转发和NAT有关的模块,例如:
论坛里的大神们编译的固件一般都集成了IPv6转发,NAT相关的模块,如果没有,安装ip6tables 和 kmod-ipt-nat6:
opkg update
opkg install ip6tables kmod-ipt-nat6
kmod-ipt-nat6对内核要求较为严格,反正我是没成功装上。。。有条件的建议编译固件时集成。
3、设置ULA prefix,此步骤做了后网站会尽量走 IPv6 通道。
登陆路由器后台,网络->接口,全局网络选项->IPv6 ULA前缀,将地址的第一个字母由f改为d即可,或者填写2fff::/64 等任意网段,应用。例如:
然后在 网络->接口-LAN 页面下方的 DHCP 服务器选项卡,选择 IPv6设置标签,如图设置然后应用:
由于学校似乎没搭IPv6 DNS,这里可以自己设置一个:
网络->接口->WAN6,高级设置,“使用端局通告的DNS服务器”取消勾选,“使用自定义的 DNS 服务器”处填写240c::6666或其他服务器,应用。
4、宣告默认网关。
使用以下命令查看当前IPv6默认路由:
ip -6 route | grep "default from"
结果是类似于这样的:
default from [ipv6 range] via [gateway] dev [intf] proto static metric 512 pref medium
(因为我们的校园网现在是PPPoE拨号,所以[intf]为pppoe-wan,请根据获得的实际结果填写)
然后向下一级宣告默认网关,输入以下命令,方括号内容自行替换:
ip -6 r add default via [gateway] dev [intf]
可以用正则表达式简化操作:
ip -6 r add default via ` ip -6 route |grep "default from" | awk 'NR==1{print $5,$6,$7}'`
这里用正则表达式简化了输入,省去自己替换的操作,若不行的话自己获取自己输入。
5、搭建NAT。
利用 ip6tables 进行内网 NAT,输入以下命令:
ip6tables -t nat -A POSTROUTING -o [intf] -j MASQUERADE
如果使用正则表达式,则输入:
ip6tables -t nat -A POSTROUTING -o `ip -6 route |grep "default from" | awk 'NR==1{print $7}'` -j MASQUERADE
这时候终端应该就可以访问 IPv6 网站了。访问个v6网站试试~
6、设置开机启动和防火墙策略
在/etc/hotplug.d/iface目录下建立 90-ipv6 文件,并填入以下内容:
#!/bin/sh
# filename: /etc/hotplug.d/iface/90-ipv6
# please make sure this file has permission 0755
[ "$ACTION" = ifup ] || exit 0
ip -6 r add default via ` ip -6 route |grep "default from" | awk 'NR==1{print $5,$6,$7}'`
这里的最后一行和步骤4的命令是同一条语句。
保存后,执行:
chmod 755 /etc/hotplug.d/iface/90-ipv6
最后,网络->防火墙->自定义规则,添加以下内容:
ip6tables -F
ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -t nat -A POSTROUTING -o `ip -6 route |grep "default from" | awk 'NR==1{print $7}'` -j MASQUERADE
这里的最后一行和步骤5的命令是同一条语句。
保存,重启机器看看能不能IPv6是否工作吧~
我的测试环境:Linksys WRT1200AC,明月永在 Openwrt 19.07固件。
参考文章:
更新(2019年):
时隔一年多重新尝试了一下用relay方式让每个设备都能拿到v6地址,但是不知道是因为odhcpd的bug还是什么原因,拿到地址后需要在设备端Ping路由器的v6地址才能让设备的v6跑起来。。。最后还是老老实实用NAT了。。。。
可以不创建90-ipv6文件,直接往系统、启动项、本地启动脚本处添加命令,更加简单粗暴些:
0 评论