存在问题:
i.MX6ULL运行Debian双网卡配置默认路由问题
IPC(网络摄像头)通过网线连接到开发板的eth1端口,希望通过4G模块将IPC采集到的图像数据转发到外网萤石云平台上,即通过配置将内网数据转发到外网。
摄像头设置为固定IP 192.168.137.192,将iMX6ULL底板的eth1设置为固定IP 192.168.137.1,
控制台下设置iptables和forward命令如下,设置网络转发。
#iptables -F //注意:此命令不能随意使用,默认网关改变很有可能是使用了此命令
#iptables -P INPUT ACCEPT
#iptables -P FORWARD ACCEPT
#iptables -t nat -A POSTROUTING -j MASQUERADE
#echo 1 > /proc/sys/net/ipv4/ip_forward
通过网线接好IPC并通电,等待约十几秒后,用route指令列出路由表如下。
root@npi:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 0.0.0.0 0.0.0.0 U 0 0 0 eth1
link-local 0.0.0.0 255.255.0.0 U 0 0 0 eth1
192.168.137.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
然后插入4G模块,并通过ppp上网(野火提供的脚本),运行脚本过程显示如下。
root@npi:~# ./ppp-on.sh
ATEt@npi:~# ATE
OK
ATH
OK
ATP
OK
AT+CGDCONT=1,"IP","CMNET"
OK
ATD*98*1#
CONNECT
Script /usr/sbin/chat -v -f ec20_ppp_dialer finished (pid 2421), status = 0x0
Serial connection established.
using channel 1
Using interface ppp0
Connect: ppp0 <--> /dev/ttyUSB2
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x9867c48> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0xb91ba038> <pcomp> <accomp>]
sent [LCP ConfAck id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0xb91ba038> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x9867c48> <pcomp> <accomp>]
sent [LCP EchoReq id=0x0 magic=0x9867c48]
rcvd [LCP DiscReq id=0x1 magic=0xb91ba038]
rcvd [CHAP Challenge id=0x1 <b0809fc9488b29ba043b6b92a811293c>, name = "UMTS_CHAP_SRVR"]
sent [CHAP Response id=0x1 <c7a1b29f9051d761067801b154cd2aef>, name = "Anyname"]
rcvd [LCP EchoRep id=0x0 magic=0xb91ba038 09 86 7c 48]
rcvd [CHAP Success id=0x1 ""]
CHAP authentication succeeded
CHAP authentication succeeded
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
rcvd [IPCP ConfReq id=0x0]
sent [IPCP ConfNak id=0x0 <addr 0.0.0.0>]
rcvd [IPCP ConfNak id=0x1 <addr 10.163.92.109> <ms-dns1 211.136.17.107> <ms-dns2 211.136.20.203>]
sent [IPCP ConfReq id=0x2 <addr 10.163.92.109> <ms-dns1 211.136.17.107> <ms-dns2 211.136.20.203>]
rcvd [IPCP ConfReq id=0x1]
sent [IPCP ConfAck id=0x1]
rcvd [IPCP ConfAck id=0x2 <addr 10.163.92.109> <ms-dns1 211.136.17.107> <ms-dns2 211.136.20.203>]
Could not determine remote IP address: defaulting to 10.64.64.64
not replacing default route to eth1 [0.0.0.0]
local IP address 10.163.92.109
remote IP address 10.64.64.64
primary DNS address 211.136.17.107
secondary DNS address 211.136.20.203
Script /etc/ppp/ip-up started (pid 2427)
Script /etc/ppp/ip-up finished (pid 2427), status = 0x0
root@npi:~#
此时列出路由表如下
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 0.0.0.0 0.0.0.0 U 0 0 0 eth1
10.64.64.64 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
link-local 0.0.0.0 255.255.0.0 U 0 0 0 eth1
192.168.137.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
因为默认路由为eth1,无法连接外网,所以手动添加一条默认网关
root@npi:~#route add default gw 10.64.64.64
路由表变成如下情况,此时IPC可通过4G网络正常传输视频数据到萤石云平台
root@npi:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.64.64.64 0.0.0.0 UG 0 0 0 ppp0
default 0.0.0.0 0.0.0.0 U 0 0 0 eth1
10.64.64.64 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
link-local 0.0.0.0 255.255.0.0 U 0 0 0 eth1
192.168.137.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
中途将IPC与eth1之间的网线拔掉,再重新插回,过十几秒后,默认路由又变成了eth1,导致无法上外网。
root@npi:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 0.0.0.0 0.0.0.0 U 0 0 0 eth1
default 10.64.64.64 0.0.0.0 UG 0 0 0 ppp0
10.64.64.64 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
link-local 0.0.0.0 255.255.0.0 U 0 0 0 eth1
192.168.137.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
需要再次手工将默认路由改为ppp0才可以连到外网上。因此,现在需要解决插拔网线后eth1自动变为默认路由的问题,是否有办法让ppp0一直为默认路由。
按照网上说的方法,在/etc/network/interfaces文件中将eth1配置成静态IP,不设网关,但实际并没有起到作用。
auto eth1
iface eth1 inet static
address 192.168.137.1
netmask 255.255.255.0
情况与该网址所述情况类似,https://www.cnblogs.com/zzyyxxjc/p/5973721.html,手工修改路由表可以解决上外网的问题,或者在4G模块拨号脚本里添加将ppp0为默认路由,这样可以在不插拔网线情况下保持IPC与外网通信,但用户插拔网线是随机事件,插回网线后默认的路由表无法上外网。
现有的内核,对iptables支持不好,会报nft: Protocol not supported
内核里把这两项下面的子项都勾选了,全都打*编译进内核,iptables就能正常用了,具体是哪项起作用,我也没细研究呢!
参考博客:
https://blog.csdn.net/wwt18811707971/article/details/54291747?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
存在问题:
原来的内核里没有勾选这些项,iptables就用不了,勾选之后才可以用。现在也实现了NAT的数据转发,有线网络上连接的摄像头数据,可以通过4G模块传输到萤石云上。问题是,一旦插拔摄像头的网线,默认的路由会变成连接摄像头的有线网口,数据就出不去了,要手工改成4G才行,每插拔一次就要改一次,在现场如果有人拔过网线,不可能让现场的人去手工改路由表的,所以问问能不能避免默认路由自己变掉的情况,就让4G当默认的路由。
正常情况:输入route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.64.64.64 0.0.0.0 UG 0 0 0 ppp0
default 0.0.0.0 0.0.0.0 U 0 0 0 eth1
10.64.64.64 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
link-local 0.0.0.0 255.255.0.0 U 0 0 0 eth1
192.168.137.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
接着拔掉IPC网线:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.64.64.64 0.0.0.0 UG 0 0 0 ppp0
10.64.64.64 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
192.168.137.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
重新插上网线,过一段时间:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 0.0.0.0 0.0.0.0 U 0 0 0 eth1
default 10.64.64.64 0.0.0.0 UG 0 0 0 ppp0
10.64.64.64 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
link-local 0.0.0.0 255.255.0.0 U 0 0 0 eth1
192.168.137.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
关于iptables中的iptables -F命令不能随意使用