树莓派4多USB调制解调器路由冲突配置问题
树莓派4多USB调制解调器路由冲突配置问题
嘿,我来帮你搞定这个多USB调制解调器的路由配置难题!首先得先搞清楚你之前遇到错误的原因:Linux的路由表不能直接用接口名(比如usb0)作为表名,必须先在系统的路由表配置文件里注册对应的表名和唯一ID,不然系统会识别不了,这就是你看到那些"invalid table ID"错误的根源。
下面是一步步的解决方案:
1. 先注册自定义路由表
首先编辑/etc/iproute2/rt_tables文件,给每个USB调制解调器分配一个唯一的路由表ID和对应的名字。比如你有usb0、usb1、usb2的话,添加以下内容(ID可以从100开始往后排,只要不跟已有的重复就行):
100 usb0_table 101 usb1_table 102 usb2_table
保存退出后,系统就能识别这些自定义路由表了。
2. 为每个接口单独配置路由规则
接下来,针对每个接口编写对应的路由配置命令,这里以usb0为例(对应IP 192.168.100.10,路由表usb0_table):
# 清理该接口的旧路由和规则 ip route del 192.168.100.0/32 dev usb0 table usb0_table ip route del default table usb0_table ip rule del from 192.168.100.10/32 table usb0_table ip rule del to 192.168.100.10/32 table usb0_table # 添加新的路由和规则 ip route add 192.168.100.0/32 dev usb0 table usb0_table ip route add default via 192.168.100.1 dev usb0 table usb0_table ip rule add from 192.168.100.10/32 table usb0_table ip rule add to 192.168.100.10/32 table usb0_table
同理,把usb0换成usb1,IP换成192.168.100.11,路由表换成usb1_table,就能配置第二个调制解调器;usb2和192.168.100.12对应usb2_table。
3. 批量处理脚本(可选,更高效)
如果有很多接口,手动敲命令太麻烦,可以写一个简单的bash脚本批量处理:
#!/bin/bash # 定义接口列表、对应IP和路由表ID interfaces=("usb0" "usb1" "usb2") ips=("192.168.100.10" "192.168.100.11" "192.168.100.12") table_ids=(100 101 102) # 循环处理每个接口 for i in "${!interfaces[@]}"; do iface=${interfaces[$i]} ip=${ips[$i]} table_name="${iface}_table" table_id=${table_ids[$i]} # 先检查路由表是否已注册,没注册就添加 if ! grep -q "$table_id.*$table_name" /etc/iproute2/rt_tables; then echo "$table_id $table_name" >> /etc/iproute2/rt_tables fi # 清理旧规则和路由(忽略不存在的错误) ip route del 192.168.100.0/32 dev $iface table $table_name 2>/dev/null ip route del default table $table_name 2>/dev/null ip rule del from $ip/32 table $table_name 2>/dev/null ip rule del to $ip/32 table $table_name 2>/dev/null # 添加新规则和路由 ip route add 192.168.100.0/32 dev $iface table $table_name ip route add default via 192.168.100.1 dev $iface table $table_name ip rule add from $ip/32 table $table_name ip rule add to $ip/32 table $table_name echo "配置完成:$iface -> $ip -> $table_name" done
把脚本保存为setup_modem_routes.sh,赋予执行权限chmod +x setup_modem_routes.sh,然后运行即可。
4. 测试配置
配置完成后,你可以用curl指定接口来测试:
curl --interface usb0 https://example.com curl --interface usb1 https://example.com
这样每个请求就会走对应的调制解调器的路由了,不会互相干扰。
备注:内容来源于stack exchange,提问作者Herbert Goes
相关产品推荐
相关产品推荐

