• 配置 4G 模块为WAN口上网


    配置 4G 模块为WAN口上网

    将Linux板卡配置为交换机或路由器,提供类似路由器的上网功能。这里以4G网卡作为WAN进行上网。

    一、使用网桥上网

    1. 配置4G模块为默认网关

    先配置好4G模块为默认路由网关。

    这里需要先将4G模块配置为路由模式。4G模块路由模式和网卡模式的区别在于,拨号成功后,路由模式下usb0网卡分配到的IP地址是局域网IP(192.168.x.x),而网卡模式分配的IP是公网IP地址(10.21.26.197)。

    断开板卡的有线和无限网络连接,使用ping baidu.com测试,如果能上网说明4G模块网络配置已经正常。否则,需要使用ip route配置4G模块为默认网关,并保证4G模块已经拨号能正常上网。

    2. 创建网桥

    参考: https://blog.csdn.net/duapple/article/details/127001192?spm=1001.2014.3001.5501

    将4G模块的usb0 网卡和其它网口桥接。我这里板卡上有两个以太网口,实验只是用一个网口,因此只桥接一个,用于连接电脑进行测试。

    brctl addbr br0
    brctl addif br0 usb0
    brctl addif br0 eth0
    ifconfig eth0 0.0.0.0
    ifconfig usb0 0.0.0.0
    ifconfig br0 up
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    然后需要将br0的IP配置成和4G模块在一个网段。第一步骤中usb0上网会有一个局域网IP:192.168.43.100。这里可以将br0的IP配置为这个:

    ifconfig br0 192.168.43.100/24
    
    • 1

    再将br0网卡设置为默认路由:

    ip route add default via 192.168.43.1 dev br0
    
    • 1

    然后应该能ping通4G模块网关192.168.43.1,再ping baidu.com应该也是能通的。

    3. PC配置

    这里通过以太网将电脑和Linux板卡连接,将PC以太网适配的地址配置为和br0一个网段,网关地址配置为4G模块的网关地址192.168.43.1。DNS地址配置114.114.114.114 。注意禁掉其它能上网的网络适配器,比如无线网卡,防止影响测试。

    image-20221204215541670

    这个时候可能还无法上网。先在windows上ping Linux板卡的br0网卡地址192.168.43.100,通了以后再ping网关地址192.168.43.1。通了以后再ping baidu.com。通了以后整个网络就通了。开始网络不通的原因可能是地址学习才开始进行导致网络不稳定,开始反复ping baidu.com网络都是时好时坏,甚至丢包。后面稳定了就好了。

    image-20221204220057058 image-20221204220142794 在Windows上进行网速测试,和Linux板卡上测试结果差不多,4G还是太慢了。

    4. 总结

    这个时候,只要使用网线连接Linux板卡,在手动配置一下IP,就可以使用Linux板卡上的4G模块进行上网了。

    二、使用NAT上网

    参考:https://codeantenna.com/a/4ZBrXkM9Zy

    需要使用iptables来配置NAT,完成转发。

    1. 配置iptables/netfilter

    NAT由内核模块netfilter来完成,iptables是用户空间的工具,两者需要搭配使用。

    1.1 netfilter

    先在内核中配置netfilter

    image-20221206215159617 image-20221206215159617 image-20221206215159617 image-20221206215159617

    注意需要开启:<*> IPv4 connection tracking support (required for NAT)才能看到-*- IPv4 NAT<*> iptables NAT support

    配置完成后重新编译烧录内核。

    1.2 iptables

    这个文件系统一般自带有。如果没有,使用交叉编译工具链自己编译,再放到开发板。为避免其它库libmnl 的引入,交叉编译配置加参数--disable-nftables

    配置地址转发,先开启转发:

    echo "1" > /proc/sys/net/ipv4/ip_forward
    
    • 1

    然后配置:

    iptables -F
    iptables -P INPUT ACCEPT
    iptables -P FORWARD ACCEPT
    iptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE
    
    • 1
    • 2
    • 3
    • 4

    不报错即可。

    2. 配置4G模块

    依然需要保证4G模块能正常上网。

    这里将4G模块配置为网卡模式。以quectel的4G模块为例,AT指令为AT+QCFG="NAT",1,配置完成后需要重启才能生效。重启,完成拨号后,4G模块会分配到类似公网IP的IP地址(10段开头的地址)。

    然后将4G模块的usb0网卡配置为默认路由。一般在上面的拨号完成后,系统会自动配置路由表。

    root@ATK-IMX6U:~# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         10.40.163.52    0.0.0.0         UG    0      0        0 usb0
    10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 usb0
    10.40.163.52    0.0.0.0         255.255.255.255 UH    0      0        0 usb0
    183.230.126.224 10.40.163.52    255.255.255.255 UGH   0      0        0 usb0
    183.230.126.225 10.40.163.52    255.255.255.255 UGH   0      0        0 usb0
    192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    我的系统就被自动配置了多条规则。

    然后ping baidu.com没有问题,那么就算是成功了。

    root@ATK-IMX6U:~# ping baidu.com
    PING baidu.com (110.242.68.66) 56(84) bytes of data.
    64 bytes from 110.242.68.66: icmp_seq=1 ttl=48 time=59.1 ms
    64 bytes from 110.242.68.66: icmp_seq=2 ttl=48 time=57.4 ms
    64 bytes from 110.242.68.66: icmp_seq=3 ttl=48 time=55.5 ms
    64 bytes from 110.242.68.66: icmp_seq=4 ttl=48 time=67.4 ms
    ^C
    --- baidu.com ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3004ms
    rtt min/avg/max/mdev = 55.571/59.903/67.421/4.522 ms
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    如果ping不同baidu,那么修改/etc/resolv.conf,添加如下内容:

    nameserver 114.114.114.114
    nameserver 127.0.0.1
    
    • 1
    • 2

    再ping就应该没有问题了。

    3. 网络配置

    除了4G模块的网络配置,还需要配置客户机和客户机相连的网口。

    3.1 Linux网口配置

    需要将Linux板卡和客户机相连的网口(eth0)配置网关地址,如192.168.10.1。否则,客户机无法上网。

    3.2 客户机网络配置

    这里客户机使用PC Windows。客户机需要和Linux板卡相连的IP设置在同一个网段,如192.168.10.200,网关地址设置为192.168.10.1。此时已经可以上网,qq能网络是通的。

    image-20221206215159617

    但是ping baidu不成功,浏览器访问baidu也不成功,这里把DNS地址设置一下,设置成114.114.114.114。然后再ping baidu,发现已经可以通了,浏览器访问也没有问题了。

    C:\Users\28328>ping baidu.com
    
    正在 Ping baidu.com [110.242.68.66] 具有 32 字节的数据:
    来自 110.242.68.66 的回复: 字节=32 时间=58ms TTL=47
    来自 110.242.68.66 的回复: 字节=32 时间=79ms TTL=47
    来自 110.242.68.66 的回复: 字节=32 时间=73ms TTL=47
    来自 110.242.68.66 的回复: 字节=32 时间=55ms TTL=47
    
    110.242.68.66 的 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最短 = 55ms,最长 = 79ms,平均 = 66ms
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    注意:一样的,测试时需要禁用掉其他能上外网的网卡,防止影响测试。

  • 相关阅读:
    massCode设置中文
    删除数组中的重复项——双指针
    《深入浅出.NET框架设计与实现》阅读笔记(四)
    大数据学习技术栈及书籍推荐
    Web前端vueDemo—实现图片切换功能(二)
    图像的几何变换(缩放、平移、旋转)
    计算机毕业设计Java便捷式管理系统(源码+系统+mysql数据库+lw文档)
    微信怎么把ip地址改成域名
    ArcGIS进阶:栅格计算器里的Con函数使用方法
    VScode 基础使用教程
  • 原文地址:https://blog.csdn.net/duapple/article/details/128178394