[红米ax6000]双wan拨号和分流思路分享

[红米ax6000]双wan拨号和分流思路分享

查看: 1263|回复: 6

[红米ax6000]

双wan拨号和分流思路分享

[复制链接]

kikbeta

kikbeta

当前离线

积分16

IP卡

狗仔卡

电梯直达

1#

发表于 2025-4-7 21:37

|

只看该作者

|倒序浏览

|阅读模式

本帖最后由 kikbeta 于 2025-4-7 21:42 编辑

家里有电信和联通两个宽带。用redmi ax6000 双wan拨号(通过光猫拨号的话,光猫cpu经常过高,所以直接ax6000来拨号)。设置分流,对国内不同运营商ip设置静态路由,其中电信、移动走电信出口,联通、歪果走联通出口,主要是电信、移动的互联好,移动和联通互联差,联通和歪果互联相对好。下面分享下思路和相关配置,对应的openwrt版本是23.05,网络架构DSA。

1.将其中的lan3改为wan。lan3 mac地址需要更改(可以将mac最后面两个字符对调)

修改/etc/config/network

其中

config device

option name 'br-lan'

option type 'bridge'

list ports 'eth1'

list ports 'lan1'

list ports 'lan2'

list ports 'lan3'

上面删掉 list ports 'lan3'一行

config device

option name 'lan3'

option macaddr 'xx:xx:xx:xx:xx:xx'

更改上面的mac地址,比如将mac最后面两个字符对调。

2.创建拨号接口pppoe_CT和pppoe_CU,分别对应电信和联通。其中pppoe_CT对应lan3接口,metric设置为20;pppoe_CU对应wan接口,metric设置为10。目的是电信、移动走电信外(移动和联通的网络互联不行,会有丢包,移动和电信互联还行),其余默认走联通。

3.通过脚本设置分流(非mwan3方案,mwan3和其它软件有冲突),设置/etc/init.d/route_split和/etc/hotplug.d/iface/99-route-split两个脚本,在pppoe接口变化的时候可以删减路由。意图是电信、移动走电信出口,设置metric 5的路由,联通、歪果走联通出口,也设置metric 5的路由。metric 5是为了覆盖第2点metric设置为20、10的默认路由。如果某个接口down了,就删掉对应的路由,由第2点的路由策略接管。

1)/etc/init.d/route_split脚本的内容如下(我创建/etc/ipset目录,把不同运行商的ip段txt文件放在里面,其实就是mwan3helper下载回来的txt文件,可以通过安装mwan3helper软件来提取,或者自己找)

cat > /etc/init.d/route_split << 'EOF'

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

START=65

STOP=90

IPSET_DIR="/etc/ipset"

WAN1_IFACE="pppoe-pppoe_CT"

WAN2_IFACE="pppoe-pppoe_CU"

log() {

logger -t "route_split" "$1"

echo "$1"

}

# 获取网关地址

get_gateway() {

local iface="$1"

ip route show dev "$iface" | awk '/via/ {print $3; exit}'

}

# 处理IP文件并添加路由

process_ip_file() {

local file="$1"

local gw="$2"

local iface="$3"

[ -f "$file" ] || {

log "Warning: $file not found"

return 1

}

while read -r ip; do

# 跳过空行和注释

[ -z "$ip" ] || [[ "$ip" =~ ^[[:space:]]*# ]] && continue

if ip route add "$ip" via "$gw" dev "$iface" metric 5 2>/dev/null; then

/lib/system.mark

log "Added route: $ip via $gw dev $iface metric 5"

else

log "Error: Failed to add route for $ip"

fi

done < "$file"

}

# 清理指定接口的路由

clean_routes() {

local iface="$1"

ip route show dev "$iface" | awk '/metric 5/ {print "ip route del "$0" 2>/dev/null"}' | sh -

log "Cleaned up all metric 5 routes for $iface"

}

setup_routes() {

local iface="${1:-}"

local wan1_gw wan2_gw

log "Setting up routes ${iface:+for $iface}..."

# 处理WAN1接口

if [ -z "$iface" ] || [ "$iface" = "$WAN1_IFACE" ]; then

/lib/system.mark

wan1_gw=$(get_gateway "$WAN1_IFACE")

[ -z "$wan1_gw" ] && {

log "Error: Failed to get gateway for $WAN1_IFACE"

return 1

}

log "WAN1 ($WAN1_IFACE) gateway: $wan1_gw"

clean_routes "$WAN1_IFACE"

for file in "$IPSET_DIR/chinatelecom.txt" "$IPSET_DIR/cmcc.txt"; do

process_ip_file "$file" "$wan1_gw" "$WAN1_IFACE"

done

fi

# 处理WAN2接口

if [ -z "$iface" ] || [ "$iface" = "$WAN2_IFACE" ]; then

/lib/system.mark

wan2_gw=$(get_gateway "$WAN2_IFACE")

[ -z "$wan2_gw" ] && {

log "Error: Failed to get gateway for $WAN2_IFACE"

return 1

}

log "WAN2 ($WAN2_IFACE) gateway: $wan2_gw"

clean_routes "$WAN2_IFACE"

process_ip_file "$IPSET_DIR/unicom_cnc.txt" "$wan2_gw" "$WAN2_IFACE"

local vps_ip=$(uci get “师夷长技以制夷”.@global[0].server 2>/dev/null)

[ -n "$vps_ip" ] && {

ip route add "$vps_ip" via "$wan2_gw" dev "$WAN2_IFACE" metric 5 && \

log "Added route for “师夷长技以制夷” VPS $vps_ip via $wan2_gw dev $WAN2_IFACE metric 5"

}

fi

log "Current routing table:"

ip route | while read -r line; do log " $line"; done

}

start() {

local iface="$1"

log "Starting route split configuration${iface:+ for $iface}..."

if [ -z "$iface" ]; then

/lib/system.mark

setup_routes "$WAN1_IFACE"

setup_routes "$WAN2_IFACE"

else

setup_routes "$iface"

fi

log "Route split configuration completed!"

}

stop() {

local iface="$1"

log "Stopping route split configuration${iface:+ for $iface}..."

if [ -z "$iface" ]; then

/lib/system.mark

clean_routes "$WAN1_IFACE"

clean_routes "$WAN2_IFACE"

else

clean_routes "$iface"

fi

log "Route split configuration stopped!"

}

restart() {

local iface="$1"

log "Restarting route split configuration${iface:+ for $iface}..."

if [ -z "$iface" ]; then

/lib/system.mark

stop

start

else

stop "$iface"

start "$iface"

fi

}

EOF

chmod +x /etc/init.d/route_split

2) /etc/hotplug.d/iface/99-route-split的内容

cat > /etc/hotplug.d/iface/99-route-split << 'EOF'

#!/bin/sh

[ -n "$DEBUG" ] && env > /tmp/hotplug-route-env.log

logger -t "hotplug-route" "Event: SUBSYSTEM=$SUBSYSTEM INTERFACE=$INTERFACE ACTION=$ACTION"

WAN1_IFACE="pppoe-pppoe_CT"

WAN2_IFACE="pppoe-pppoe_CU"

MAX_WAIT=30

is_managed_interface() {

case "$INTERFACE" in

"pppoe_CT"|"pppoe_CU") return 0 ;;

*) return 1 ;;

esac

}

get_wan_gateway() {

local iface="$1"

ip route show dev "$iface" | awk '/via/ {print $3; exit}'

}

if is_managed_interface; then

logger -t "hotplug-route" "Matched Interface $INTERFACE action $ACTION"

case "$ACTION" in

"ifup"|"ifupdate")

# 确定对应的WAN接口

case "$INTERFACE" in

"pppoe_CT") target_iface="$WAN1_IFACE" ;;

"pppoe_CU") target_iface="$WAN2_IFACE" ;;

esac

# 等待网关出现

i=0

while [ $i -lt $MAX_WAIT ]; do

gw=$(get_wan_gateway "$target_iface")

[ -n "$gw" ] && break

sleep 1

i=$((i + 1))

done

if [ -z "$gw" ]; then

logger -t "hotplug-route" "Error: No gateway found for $target_iface after ${MAX_WAIT}s"

exit 1

fi

/etc/init.d/route_split restart "$target_iface"

;;

"ifdown")

case "$INTERFACE" in

"pppoe_CT") /etc/init.d/route_split stop "$WAN1_IFACE" ;;

"pppoe_CU") /etc/init.d/route_split stop "$WAN2_IFACE" ;;

esac

;;

esac

fi

EOF

chmod +x /etc/hotplug.d/iface/99-route-split

4.如果有公网ip,需要设置pppoe接口的源进源出。通过/etc/hotplug.d/iface/97-update-tables和/etc/custom_scripts/update_pppoe_tables.sh两个脚本来实现,主要是通过iproute2设置rule: from xxx(电信或联通ip) lookup table xxx(分别定义电信和联通的table,下文分别是150和200)

1、配置/etc/hotplug.d/iface/97-update-tables,监视接口变化的时候。

cat > /etc/hotplug.d/iface/97-update-tables << 'EOF'

#!/bin/sh

[ -n "$DEBUG" ] && set -x

MAX_WAIT=30

MANAGED_INTERFACES="pppoe_CT pppoe_CU pppoe_CT_6 pppoe_CU_6"

PHY_IFACE_MAP="pppoe_CT:pppoe-pppoe_CT pppoe_CU:pppoe-pppoe_CU pppoe_CT_6:pppoe-pppoe_CT pppoe_CU_6:pppoe-pppoe_CU"

log() { logger -t "hotplug-update-tables" "$*"; }

get_phy_interface() {

[ -z "$1" ] && { log "Error: Missing interface name"; return 1; }

for mapping in $PHY_IFACE_MAP; do

[ "${mapping%:*}" = "$1" ] && { echo "${mapping#*:}"; return 0; }

done

log "Error: No physical interface mapped for $1"

return 1

}

wait_for_network_info() {

local phy_iface="$1" ip ip6 gw i

[ -z "$phy_iface" ] && { log "Error: Missing physical interface"; return 1; }

for i in $(seq 1 $MAX_WAIT); do

ip=$(ip -4 addr show "$phy_iface" 2>/dev/null | awk '/inet / {print $2; exit}' | cut -d/ -f1)

ip6=$(ip -6 addr show "$phy_iface" 2>/dev/null | awk '/inet6 / {print $2; exit}' | cut -d/ -f1)

gw=$(ip -4 route show dev "$phy_iface" 2>/dev/null | awk '/via / {print $3; exit}')

[ -n "$ip" ] && [ -n "$ip6" ] && [ -n "$gw" ] && { echo "$ip $ip6 $gw"; return 0; }

sleep 1

done

log "Error: Failed to get IP or gateway for $phy_iface after ${MAX_WAIT}s (IP=$ip, IPv6=$ip6, GW=$gw)"

return 1

}

log "Event: INTERFACE=$INTERFACE ACTION=$ACTION"

case "$INTERFACE" in

pppoe_CT|pppoe_CU|pppoe_CT_6|pppoe_CU_6)

phy_iface=$(get_phy_interface "$INTERFACE") || exit 1

case "$ACTION" in

ifup|ifupdate)

if network_info=$(wait_for_network_info "$phy_iface"); then

/etc/custom_scripts/update_pppoe_tables.sh "$ACTION" "$phy_iface" || exit 1

fi

;;

ifdown)

/etc/custom_scripts/update_pppoe_tables.sh "$ACTION" "$phy_iface" || exit 1

;;

*) log "Error: Unknown action '$ACTION'"; exit 1 ;;

esac

;;

esac

EOF

chmox +x /etc/hotplug.d/iface/97-update-tables

2) 设置/etc/custom_scripts/update_pppoe_tables.sh

cat > /etc/custom_scripts/update_pppoe_tables.sh << 'EOF'

#!/bin/sh

[ -n "$DEBUG" ] && set -x

ACTION="${1:?Missing action}"

INTERFACE="${2:?Missing interface}"

RT_TABLES="/etc/iproute2/rt_tables"

CT_TABLE=150

CU_TABLE=200

CT_PRIORITY=20000

CU_PRIORITY=20001

CT_IFACE="pppoe-pppoe_CT"

CU_IFACE="pppoe-pppoe_CU"

log() { logger -t "update_pppoe_tables" "$*"; }

ensure_rt_tables() {

grep -q "^${CT_TABLE}[[:space:]]*CT" "$RT_TABLES" || echo "${CT_TABLE} CT" >> "$RT_TABLES"

grep -q "^${CU_TABLE}[[:space:]]*CU" "$RT_TABLES" || echo "${CU_TABLE} CU" >> "$RT_TABLES"

}

flush_table() {

local table="$1"

ip route flush table "$table" 2>/dev/null

ip -6 route flush table "$table" 2>/dev/null

ip rule flush table "$table" 2>/dev/null

ip -6 rule flush table "$table" 2>/dev/null

}

update_routes() {

local iface="$1" table="$2" priority="$3"

local ip ip6 gw gw6

ip=$(ip -4 addr show "$iface" 2>/dev/null | awk '/inet / {print $2; exit}' | cut -d/ -f1)

ip6=$(ip -6 addr show "$iface" 2>/dev/null | awk '/inet6 / {print $2; exit}' | cut -d/ -f1)

gw=$(ip -4 route show dev "$iface" 2>/dev/null | awk '/via / {print $3; exit}')

gw6=$(ip -6 route show dev "$iface" 2>/dev/null | awk '/via / {print $3; exit}')

log "Updating $iface: IP=$ip, IP6=$ip6"

flush_table "$table"

[ -n "$gw" ] && ip route add default via "$gw" dev "$iface" table "$table"

[ -n "$gw6" ] && ip -6 route add default via "$gw6" dev "$iface" table "$table"

[ -n "$ip" ] && ip rule add from "$ip" table "$table" priority "$priority"

[ -n "$ip6" ] && ip -6 rule add from "$ip6" table "$table" priority "$priority"

}

ensure_rt_tables

case "$ACTION" in

ifup|ifupdate)

case "$INTERFACE" in

"$CT_IFACE") update_routes "$CT_IFACE" "$CT_TABLE" "$CT_PRIORITY" ;;

"$CU_IFACE") update_routes "$CU_IFACE" "$CU_TABLE" "$CU_PRIORITY" ;;

*) log "Error: Unknown interface '$INTERFACE'"; exit 1 ;;

esac

;;

ifdown)

case "$INTERFACE" in

"$CT_IFACE") flush_table "$CT_TABLE"; log "Flushed table $CT_TABLE" ;;

"$CU_IFACE") flush_table "$CU_TABLE"; log "Flushed table $CU_TABLE" ;;

*) log "Error: Unknown interface '$INTERFACE'"; exit 1 ;;

esac

;;

*) log "Error: Unknown action '$ACTION'"; exit 1 ;;

esac

EOF

chmod+x /etc/custom_scripts/update_pppoe_tables.sh

设置后重启。

双wan多拨, 双拨路由规则

分享到:

QQ好友和群

QQ空间

收藏0

支持0

反对0

相关帖子

• 请问XDR6088的双wan拨号有没有负载均衡功能

• 新三双线多拨IPV4和IPV6上网成功

• 双线多拨请教

• 关于多WAN拨号与单WAN多拨,请大神们讨论一下

• 4530R,双拨以后的IP地址看不懂了,求助

• ni360双拨成功,但过一会儿就dns错误上不了网了

• 可以双拨多拨的一体机神器

• 可以双拨多拨的神器

• 新手请教双拨和QoS的4个问题,大家不吝指教??

• 双拨and多拨被限制后,是否还有其它可行方法?

• 请教高手 dualwan 双拨号问题!!! 电信?移动?联通?

• 6M ADSL双拔才可以全速下载

• 求推荐一款双PPPOE拨号的机器

只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。

回复

使用道具

举报

置顶卡

沉默卡

喧嚣卡

顶贴卡

显身卡

iamyangyi

iamyangyi

当前离线

积分3492

IP卡

狗仔卡

2#

发表于 2025-4-7 21:42

|

只看该作者

还是爱快多WAN要方便 分流效规则率高的多,

点评

kikbeta

爱快可能没有一些特殊上网功能。

详情

回复

发表于 2025-4-7 21:43

只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。

回复

使用道具

举报

显身卡

kikbeta

kikbeta

当前离线

积分16

IP卡

狗仔卡

3#

楼主|

发表于 2025-4-7 21:43

|

只看该作者

iamyangyi 发表于 2025-4-7 21:42

还是爱快多WAN要方便 分流效规则率高的多,

爱快可能没有一些特殊上网功能。

点评

iamyangyi

也有,但是收费。或加虚拟机。

详情

回复

发表于 2025-4-7 21:47

只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。

回复

使用道具

举报

显身卡

iamyangyi

iamyangyi

当前离线

积分3492

IP卡

狗仔卡

4#

发表于 2025-4-7 21:47

|

只看该作者

kikbeta 发表于 2025-4-7 21:43

爱快可能没有一些特殊上网功能。

也有,但是收费。或加虚拟机。

点评

kikbeta

哦哦,受教了。

详情

回复

发表于 2025-4-7 21:49

只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。

回复

使用道具

举报

显身卡

iamyangyi

iamyangyi

当前离线

积分3492

IP卡

狗仔卡

5#

发表于 2025-4-7 21:48

|

只看该作者

本帖最后由 iamyangyi 于 2025-4-7 21:51 编辑

不用MW3HELP的规则,直接同步CLANG行了

点评

futurejunjie

老哥,我现在也是电信和联通两条ISP,用的ImmortalWrt 24.10,分流策略不怎么会,现在两条宽带拨号是没问题,但是只能用一条线路,看大佬能不能分享下思路。

详情

回复

发表于 2025-4-17 14:23

评分

参与人数 1恩山币 +1

收起

理由

kikbeta

+ 1

不错不错

查看全部评分

只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。

回复

使用道具

举报

显身卡

kikbeta

kikbeta

当前离线

积分16

IP卡

狗仔卡

6#

楼主|

发表于 2025-4-7 21:49

|

只看该作者

iamyangyi 发表于 2025-4-7 21:47

也有,但是收费。或加虚拟机。

哦哦,受教了。

只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。

回复

使用道具

举报

显身卡

futurejunjie

futurejunjie

当前离线

积分326

IP卡

狗仔卡

7#

发表于 2025-4-17 14:23

|

只看该作者

iamyangyi 发表于 2025-4-7 21:48

不用MW3HELP的规则,直接同步CLANG行了

老哥,我现在也是电信和联通两条ISP,用的ImmortalWrt 24.10,分流策略不怎么会,现在两条宽带拨号是没问题,但是只能用一条线路,看大佬能不能分享下思路。

只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。

回复

使用道具

举报

显身卡

相关推荐

檄翦拼音怎么读
365bet手机在线投注

檄翦拼音怎么读

📅 12-03 👁️ 3842
电容器正负极怎么判断:快速识别方法与图解指南
365平台是做什么的

电容器正负极怎么判断:快速识别方法与图解指南

📅 08-26 👁️ 3757
1000M家庭宽带要普及,2000M在路上,上海电信启动第11次宽带提速
bet体育365官网正规平台

1000M家庭宽带要普及,2000M在路上,上海电信启动第11次宽带提速

📅 08-11 👁️ 3567
没想到,微信扫一扫加好友功能竟还有这些技巧
bet体育365官网正规平台

没想到,微信扫一扫加好友功能竟还有这些技巧

📅 12-05 👁️ 4750
厚黑学作者:李宗吾
bet体育365官网正规平台

厚黑学作者:李宗吾

📅 11-11 👁️ 175
Video Enhancer
365平台是做什么的

Video Enhancer

📅 08-04 👁️ 5226