对设备进行调试时,需要使用专用4G卡通过给电脑连接手机热点的方式进行调试,同时希望手机可以连接wifi访问互联网

首先添加一条通过4G卡的路由规则,将特定设备的网段指定通过手机物联网卡出站

1
ip rule add to 100.0.0.0/8 table rmnet_data1 pref 100

此时上在手机上已经可以ping通设备IP,说明路由生效了,但是电脑连接手机的过USB网络共享仍然只能访问手机连接的WIFI物联网,无法通过4G网络访问设备IP

查看iptebles的nat表,在tetherctrl_nat_POSTROUTING -o wlan0 -j MASQUERADE前添加一条tetherctrl_nat_POSTROUTING -d 100.0.0.0/8 -o rmnet_data1 -j MASQUERADE 这样就能指定100.0.0.0/8网段的IP通过rmnet_data1接口出站

1
2
3
iptables -t nat -D tetherctrl_nat_POSTROUTING -o wlan0 -j MASQUERADE
iptables -t nat -A tetherctrl_nat_POSTROUTING -d 100.0.0.0/8 -o rmnet_data1 -j MASQUERADE
iptables -t nat -A tetherctrl_nat_POSTROUTING -o wlan0 -j MASQUERADE

此时USB网络共享的电脑仍然不能访问设备IP,再继续找iptables中的规则,发现filter有一条规则时将tetherctrl_FORWARD的目标全部丢弃tetherctrl_FORWARD -j DROP,可以通过的规则在这条规则前面,需要把这条规则删掉,就可以了

1
2
3
4
# iptables -t filter -D tetherctrl_FORWARD -i wlan0 -o rndis0 -m state --state RELATED,ESTABLISHED -g tetherctrl_counters
# iptables -t filter -D tetherctrl_FORWARD -i rndis0 -o wlan0 -m state --state INVALID -j DROP
# iptables -t filter -D tetherctrl_FORWARD -i rndis0 -o wlan0 -g tetherctrl_counters
iptables -t filter -D tetherctrl_FORWARD -j DROP #删除这条就能默认丢弃的规则就可以了

现在就实现了默认通过WIFI访问互联网,100.0.0.0/8网段通过4G卡访问

TODO: 双4G上网,通过物联网卡访问物联网,通过正常4G访问互联网