前言
对于嵌入式设备产品,一般会有一个有线网卡,4G模块网卡或者wifi网卡,当4G模块网卡或者wifi网卡有网络时,怎么
使得另外一个有线网卡网络共享给其他设备上网,这就本博客主要讲解的内容;
一. 专栏目录
本专栏目录如下,按顺序阅读,有助于你的理解。
二、嵌入式设备上网(eth1/ra0)
1、嵌入式设备产品,如果有4G通讯模块或者wifi模块,就可以通过对应模块的网卡上网,
(1)、4G通讯模块(移远EC20):移植4G模块驱动并上网,可以查看博主文章:
嵌入式设备路由网络共享开发(2):4G模块驱动移值
(2)、wifi模块(MT7601),移植wifi模块驱动并使用STA模式上网,可以查看博主文章:
嵌入式设备路由网络共享开发(3):WIFI驱动(MT7601)的移值
至此,可以通eth1或者ra0网卡上网,能ping
www.baidu.com
就行。
三、有线网卡(eth0)静态IP的配置
1、修改配置文件配置网卡eth0为静态IP
# vi /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.42.134
netmask 255.255.255.0
gateway 192.168.42.1
dns-nameserver 8.8.8.8
注意:
(1)、【eth0】是我的系统的网卡名,用ifconfig可以查看自己机器的网卡名
(2)、设置为【static】表示静态ip(Linux默认获取ip方式是DHCP,自动获取的)
(3)、最后一句dns-nameserver 8.8.8.8表示重启网卡或者Linux系统之后,会自动在/etc/resolv.conf中添加这个dns
(4)、sudo /etc/init.d/networking restart 重启网卡
2、使用代码配置静态IP
# ifconfig eth0 192.168.100.100 netmask 255.255.255.0
在嵌入式产品中,会改变设备的网口IP地址,这时候就需要在代码逻辑中进行灵活性的配置;
四、iptables配置net路由模式
1、关于iptables的使用,详解查看:嵌入式设备路由网络共享开发(4):iptables详解;
配置net路由模式使用下面命令:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISH -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
eth1为已经有网络的网卡,eth0为需要配置上网的有线网卡;
2、开启linux下的网口转发
出于安全考虑,Linux系统默认是禁止数据包转发的。
所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。配置Linux系统的ip转发功能,首先保证硬件连通,然后打开系统的转发功能
cat /proc/sys/net/ipv4/ip_forward,该文件内容为0,表示禁止数据包转发,1表示允许。
这里我设置为1,开启数据包转发:
echo "1" > /proc/sys/net/ipv4/ip_forward
五、开启udhcpd服务器
1、创建/udhcpd_eth0.conf 配置文件
#vi /var/dvr/udhcpd_eth0.conf
start 192.168.100.2
end 192.168.100.99
interface eth0
opt router 192.168.100.100
opt subnet 255.255.255.0
max_leases 99
opt dns 202.96.134.33
这个配置eth0网卡为udhcpd服务器,可以分配的IP从192.168.100.2--192.168.100.99,路由IP为192.168.100.100,最多可以分配99IP地址,dns为202.96.134.33
注意:这里的dns一定可以上网网卡eth1/ra0的DNS,如果改变了,这里也需要同步改变;
2、启动udhcpd 服务
udhcpd -f /var/dvr/udhcpd_eth0.conf &
五、总结
至此,当其他设备通过网口接到eth0,外设就可以通过eth0上网,每个嵌入式设备有着不一样的通讯方式,这里单纯是举了一个例子,如果有疑问和意见,欢迎大家留言交流。