200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Pandorabox等类OpenWrt的路由器 实现后端设备接入IPV6(中继代理+NAT)

Pandorabox等类OpenWrt的路由器 实现后端设备接入IPV6(中继代理+NAT)

时间:2024-01-24 06:57:58

相关推荐

Pandorabox等类OpenWrt的路由器 实现后端设备接入IPV6(中继代理+NAT)

本随笔针对高校支持ipv6的校园网,ipv6由上游路由器dhcp动态分配(无状态),电脑直连可以通过dhcp获取到ipv6的地址(前提)。

路由器CPU :MTK MT7620A/MT7621AT

路由器运行PandoraBox 18.10

IPV6-中继转发

实现环境:湖南科技大学校园网家属区环境

逛Pangubox论坛发现了很好的方法,该方法基于中继转发,可以在不添加任何安装包的情况下,通过修改配置实现。

相关教程网址:https://blog.rabit.pw//lede-ipv6

在校园网环境可能还需要修正默认路由,请参考IPV6-NAT的方法二的第三步进行修正,当此方式无效再尝试NAT

本人根据自身所处校园网环境的实际情况,在借鉴上述教程的基础上,对部分无用配置做了删除精简,目前并未发生异常。

配置IPV6中继转发

SSH或者WinSCP进路由器。修改/etc/config/dhcp,修改LAN的DHCP配置区,新增WAN6的DHCP配置区。

按如下配置修改:

config dhcp 'wan6'option ra 'relay'option ndp 'relay'#option dhcpv6 'relay'option master '1'config dhcp 'lan'option interface 'lan'option start '100'option limit '150'option leasetime '12h'option ra 'relay'#option dhcpv6 'relay'option ndp 'relay'

个人解释(大意猜的):开启WAN6区域的DHCP路由通告和NDP中继,并设置为主区域(DHCPv6服务器所在区域),LAN区域同样开启DHCP路由通告和NDP中继,默认为从属区域(DHCPv6客户端所在区域)。因为我校校园网家属区的IPV6地址是SLACC无状态下发的所以不需要开启DHCPv6的中继服务,wan口复制一份wan6的配置似乎没有必要,二者从属eth0.2的接口,中继一份应该可以了,从抓包的结果来分析,br-lan的RA报文从两条减少到一条,看来配置是正确的。

在学生区上网,则关闭NDP转发,开启DHCPv6报文转发,因为学生区上网是通过DHCPv6服务器动态下发地址的,但是因为服务器不支持中继应答,无法实现,下图抓取的报文不见Relay-reply。

使用该方法实现,IPV6流量在开启硬件加速的情况下改走硬件转发引擎,不再占用CPU,转发效率极高。

本方式的不足之处:

使用此种方式,NDP不会转发同一前缀下的NS邻居请求到上级网关,故如果有设备不接在本路由器的LAN区域下而是WAN区域下,但是前缀相同,后端设备会因为得不到NA响应而显示无法连接。解决方式是路由器上ping一次即可,路由器会向WAN口发送NS请求从而得到上级网关的响应,邻居表就会建立,链路将被打通(IPV6-NAT方式不受此影响)。

附:1、该方式对于本人的WIN10 无线网络(适配器Intel AC 3168)有BUG,当第二次重新连接WIFI时,IPV6不能获取相关的公网地址,造成链路不通。临时解决方式为重置无线网络适配器。

2、该方式在一段长的时间(如一晚上)后v6链路会失效,具体原因可能与路由器邻居关系异常有关,在最坏情况下需要重置路由器的network,NAT实现方式无此问题。

IPV6-NAT

实现环境:湖南科技大学校园网学生区+家属区环境

方法一(个人表示有一定的不稳定):

参考自/doc/howto/ipv6.nat6的教程,

以上同时参考的官方文档:/doc/howto/ipv6.nat6,已经弄清了里面第四步里的firewall.d script的使用方法,官网的文档代码老旧,在最新的机子上面可能出错,最新的代码在代码提供者的github上面有:/doc/howto/ipv6.nat6

一、安装必须的软件包

首先在ipv4已联网的条件下安装必要的软件:

opkg update &&opkginstall kmod-ipt-nat6

二、配置WAN6和LAN接口及全局ULA设置

检查wan6是否有ipv6地址,如果没有设置wan6,保证有ipv6地址

然后把IPv6 ULA前缀第一个字母改成d开头的:

这个luci下面改吧,命令怪怪的

官方文档对这个操作的解释是:默认前缀是非全局路由的地址,大多路客户端在没有全局IPv6地址的情况下只有IPv4地址,所以需要将前缀改成未使用过的全局地址的样子。

接下来更改DHCP服务器的设置,默认有状态分配即可(方便管理),当然你也可以两者都有:

三、修改系统文件,开启转发

修改/etc/sysctl.conf,将以下内容加进去,大意说接收广播并开启IPv6转发

net.ipv6.conf.default.forwarding=2net.ipv6.conf.all.forwarding=2net.ipv6.conf.default.accept_ra=2net.ipv6.conf.all.accept_ra=2

推荐用WinSCP修改

接着在/etc/firewall.user添加防火墙规则:

ip6tables -t nat -I POSTROUTING -s $(uci get network.globals.ula_prefix) -j MASQUERADE

重启之后就能通过路由器上v6。

方法二(推荐):

参考清华大学的IPv6NAT教程:/tuna/ipv6./blob/master/openwrt.md

本方法基于上述教程,但是结合自身和实际遇到的情况做了修改。同时参考了方法一,前提条件与方法一一致。

一、安装必须的软件包,配置接口

首先在ipv4已联网的条件下安装必要的软件:

opkg update && opkg install ip6tables kmod-ipv6 kmod-ipt-nat6 kmod-ip6tables kmod-ip6tables-extra luci-proto-ipv6

iputils-traceroute6不进行安装是该功能已经由BusyBox提供了。

接下来同样是检查是否有IPV6地址,和把IPv6 ULA前缀第一个字母改成d开头的,与方法一第二步骤相同,这样下端设备会默认用IPV6而不是IPV4(fd开头的则默认IPV4)。

二、打开IPv6 NAT

因为OpenWRT默认的防火墙配置不会管IPv6的nat表,需要在/etc/firewall.user里面手动配置

WAN6=eth0.2LAN=br-lanip6tables -t nat -A POSTROUTING -o $WAN6 -j MASQUERADEip6tables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPTip6tables -A FORWARD -i $LAN -j ACCEPT

接下来在修改/etc/config/firewall里面的设置,在wan区域增加一条

option masq6 '1'

#你的wan区域可能是下面这样的:

config zoneoption name 'wan'list network 'wan'list network 'wan6'option input 'REJECT'option output 'ACCEPT'option forward 'REJECT'option masq '1'option mtu_fix '1'

#然后你加入那条语句进去就好,靠在option masq '1'下面就好

三、重新配置默认路由

在路由器上ip -6 route看一下自己的默认路由。如果获得的是

default from 2001:250:x:xxxx::/128 via fe80::xxxx:xxxx:xxxx:xxxx dev eth0 proto static metric 512

这样的路由配置在转发NAT包的时候会有问题,需要把去掉from 2001:250:x:xxxx::/128这一部分的以后的默认路由添加到路由表中,实现所有外网地址均向默认路由进行转发。新建一个/etc/hotplug.d/iface/99-ipv6,它的内容是

#!/bin/sh[ "$ACTION" = ifup ] || exit 0[ "$INTERFACE" = wan6 ] || exit 0#注:在接口重置的时候运行脚本,可能会得到多条默认路由,有些是不可达的,我增加了一条指令来删除多余的路由,再把修改好的命令进行运行。在实地测试中发现了这个不完善的地方,并进行了修补。ip -6 route add `ip -6 route show default|sed -e 's/from [^ ]* //'|sed -e '2,$d'` logger -t IPv6 "Add IPv6 default route."

最后,记住给这个脚本加上权限。

chmod a+x /etc/hotplug.d/iface/99-ipv6

最后附成功图片

后记:本以为路由器会稳定点,然而我还是想错了,事实证明,自己电脑以前v6经常连上一会就断线是上游服务器的锅,没法,写个监控脚本来重连v6

最开始写的时候总是写不对,看着网上的教程估计是不匹配,最后找到个网站,总算是解决shell的编写问题了,网站地址:/ash-linux-command-4095519

再次编辑的补充:使用方法二后链路稳定下来了,可以不需要监控脚本,如果想打个保险的话依旧可以使用的。

附自己写的监控脚本:

#!/bin/shecho ---校园网IPv6守护进程启动---echo ---版本类型:守护进程---echo ---开始检测v6网络连接情况---while !(/bin/ping -c 1 2001:4860:4860::8888 >/dev/null)doecho ---检测到v6断线---/sbin/ifup wan6echo ---重置wan6端口---tries=0while [[ $tries -lt 3 ]]doif /bin/ping -c 1 2001:4860:4860::8888 >/dev/nullthenecho --- 重连成功 ---echo ---校园网IPv6已连线---breakfitries=$((tries+1))sleep 10donedone#计划任务添加项目#*/2 * * * * sh /root/IPv6_Monitor.sh

脚本第二版更新,可参考,但不得用于商业用途,整合原校园网认证(portal方式,采用wegt发送portal包实现认证),当然也可以试试curl、easyDrcom。

#!/bin/sh#sleep 100cd /tmpDATE=`date +%Y-%m-%d-%H:%M:%S`tries=0ipv4_OK=falseipv6_OK=falseecho ---校园网守护进程启动---echo ---版本类型:IPv4守护进程---echo ---开始检测网络连接情况---while [[ $tries -lt 1 ]]doif /bin/ping -c 1 >/dev/nullthenecho --- 连接成功 ---#echo $DATE OK >>my_watchdog.logecho ---校园网正常在线---ipv4_OK=truebreakfitries=$((tries+1))sleep 10# echo $DATE tries: $tries >>my_watchdog.logdoneif !($ipv4_OK)thenecho ---网络连接失败---cd /tmpecho ---监测到校园网断线,重新连接---#这个打开浏览器开发者工具,到网络哪里去看,认证一次就会出现portal包,自己看包内的内容填入即可,下面附一个示例,注:前面的username和password也可能是其他的名称,具体以浏览器开发工具看到的为准wget --post-data="username=你的用户名&password=你的密码" --save-cookies=cookie.txt --keep-session-cookies "认证服务器地址"rm -f "生成的某个文件(文件名不确定),你同样可以不删除,这个放在内存中,重启就会消失的"rm -f cookie.txt #已经确定的一个文件名echo ---校园网已重连---#echo $DATE IPv4_CONNECT! >>my_watchdog.logfi#echo $DATE CONNECT! >>my_watchdog.logecho ---版本类型:IPv6守护进程--echo ---开始检测v6网络连接情况---if /bin/ping6 -c 1 2620:0:ccc::2 >/dev/nullthenecho ---校园网IPv6已连接--ipv6_OK=true

fiif !($ipv6_OK)thenvaluetry=0while [[ $valuetry -lt 3 ]]doecho ---检测到v6断线---valuetry=$((valuetry+1))echo ---第$valuetry次尝试/sbin/ifup wan6echo ---重置wan6端口---tries=0while [[ $tries -lt 3 ]]doif /bin/ping6 -c 3 2620:0:ccc::2 >/dev/nullthenecho --- 校园网IPv6重连成功 ---echo --- 校园网IPv6已连接 ---#echo $DATE IPv6_CONNECT! >>my_watchdog.logexit 0fitries=$((tries+1))donedoneecho ---重连失败---fi#计划任务添加项目#*/3 * * * * sh /root/IPv4&&IPv6_Monitor.sh

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。