前言
本站之前之前介绍过不同运营商的多线多播,如果你在同一个运营商具有多个宽带账号,则可以通过单线进行拨号,实现单线多拨。
操作
openwrt版本:22.03.5
需要依赖:kmod-macvlan(若自行编译,编译选项为Kernel modules→Network Devices→Kmod-macvlan)
如果需要策略路由(分流/负载均衡):mwan3插件
单线多拨
1.进入openwrt后台后,点击网络→接口→设备→添加设备配置。
创建一个MAC VLAN,基设备选择接运营商设备的口,这里以wan为例。

有几个账号就创建几个MAC VLAN
2.在网络→接口→接口页面将原有的wan,wan6删除。
3.在网络→接口→接口页面点击添加新接口...,设备选择刚刚创建的MAC VLAN设备,并将防火墙区域选择为WAN


老版本的openwrt可能不能通过luci添加macvlan接口,可以在系统→启动项→本地启动脚本编辑本地启动脚本,通过命令添加接口。
#eth0为接运营商设备的口,wanmac0可根据需要进行修改,mode有四种模式可选bridge, vepa, passthru, private ip link add link eth0 name wanmac0 type macvlan mode private #可选,设置该接口的mac地址,mac地址也可根据需要进行修改。 ifconfig wanmac0 hw ether 00:01:6C:06:A6:29 #启动接口 ifconfig wanmac0 up
通过脚本添加的接口在重启后生效,亦可通过ttyd/ssh直接执行这些命令生效。
还可通过修改网络配置文件创建接口,具体可参考:https://forum.openwrt.org/t/save-ip-link-macvlan-interfaces-after-reboot/5215
有几个账号则创建几个接口,通过这些接口则可以实现单线多拨。
nat6
若运营商提供了IPV6,则以上操作已经可以访问IPV6了。
如果需要实现IPV6的分流与负载均衡,需要配置nat6。
1.进入openwrt后台后,点击网络→防火墙→区域,点击wan的编辑,进入高级设置,勾选IPv6 Masquerading

2.进入网络→接口→接口页面,点击添加新接口...,协议选择DHCPv6 客户端,设备选择@之前新建的接口

常规设置中,请求指定长度的 IPv6 前缀选择已禁用,高级设置中取消勾选IPv6 源路由,防火墙选择wan。
根据实际情况可配置多个接口

3.进入网络→接口→全局网络选项页面,将IPv6 ULA 前缀修改为2001:db8::/32(若仅需要NAT6,且未安装mwan3插件,可不进行此步骤)。
自此已完成nat6的设置。
IPV6前缀转换
Nat6会使局域网内所有设备使用同一个IPV6出口,从而失去了每一个设备均有一个IPV6地址的优势,但是MWAN3可能会将A运营商IPV6地址流量导向B运营商的接口,而B运营商看到地址并非自己的地址,会直接丢弃这些流量,可能导致网络不通。为了解决这个问题,可以采用前缀转换,将A运营商的地址改写为B运营商的地址。
核心原理如下
#添加表
nft add table ip6 表名
#添加规则链
nft create chain ip6 表名 链名 { type nat hook postrouting priority srcnat \; }
#添加具体规则,有几个出口设备需要添加几条
nft add rule ip6 表名 链名 oifname "<当前出口设备>" ip6 saddr != <当前接口前缀> snat ip6 prefix to ip6 saddr map { <其他前缀1> : <当前前缀>, <其他前缀2> : <当前前缀> ... }
为了便于使用,创建了一个Openwrt应用,https://github.com/zorzcc/luci-app-ipv6prefixsnat,可以自动实现前缀的转换。但是应用未经广泛测试,需要谨慎使用。
mwan3
mwan3的IPV6设置可以参考:k2p基于openwrt实现不同运营商双宽带/双线叠加。
注意:
1.添加IPV6的策略后可能导致IPV6的网络不通,需要重启路由器才能使IPV6网络恢复并使IPV6相关策略生效(与防火墙配置有关)。
2.部分情况下,DHCPv6 客户端可能获取不到IPV6地址,可以尝试将拨号接口中的获取 IPv6 地址改为手动以解决该问题。
3.还可以通过脚本检测是否获取到IPV6地址,拨号后自动检测是否能使用ipv6,若否则重拨,将以下脚本加入到/etc/hotplug.d/iface,需要将其中的wan0与wan0_6改成你实际使用的接口,若对脚本没有足够的了解,切勿使用该脚本。
#!/bin/sh [ "$INTERFACE" = wan0_6 ] && [ "$ACTION" = ifup ] || exit 0 sleep 20s ipv6Addr=$(ubus call network.interface.wan0_6 status | jsonfilter -e '@["ipv6-address"][0].address') if [ "$ipv6Addr" == "" ]; then logger -p notice -t check_ipv6 "no ipv6, now reboot interface" ifup wan0 else logger -p info -t check_ipv6 "obtained ipv6 address successfully" fi
该脚本将在拨号后20秒检测是否有IPV6,若无则重拨,在无法获取IPV6的环境下会导致一直重启wan0口。
参考链接:
https://openwrt.org/docs/guide-user/network/ipv6/ipv6.nat6
在 OpenWRT 19.07 上实现 NPTv6 (NAT66)
https://www.oomake.com/
https://blog.csdn.net/Cx2008Lxl/article/details/123115782
https://www.right.com.cn/forum/thread-8291704-1-1.html

你好,你的这个openwrt版本:22.03.5固件能提供一下吗,谢谢了。[undefined]
可以在此处下载:https://firmware-selector.openwrt.org