实现在嵌入式平台内网共享
A设备有外网
B设备无外网
使用iptables nat转发,实现A设备给B设备提供网络
一、内核添加iptables选项支持
按照下图中选项配置内核iptables支持。
二、iptables工具编译
示例中选择的时iptables1.6.2版本。(iptables源码下载)
注意:需要修改 configure文件中文件地址,否则使用时可能出现 “Fatal: can’t open lock file /run/xtables.lock: No such file or directory”报。
旧:xt_lock_name=”/run/xtables.lock”
新:xt_lock_name=”/mnt/mtd/xtables.lock”
交叉编译命令
./configure --prefix=/home/lyl/SVN/iptables16 --host=arm-ca9-linux CC=arm-ca9-linux-uclibcgnueabihf-gcc --disable-nftables
make
make install
–prefix=/home/lyl/SVN/iptables16配置的是编译后的文件保存路径
CC=arm-ca9-linux-uclibcgnueabihf-gcc配置NT98321交叉编译器
–disable-nftables 去除该选项,不去除可能会存在如下报错
checking for libmnl... no
*** Error: No suitable libmnl found. ***
Please install the 'libmnl' package
Or consider --disable-nftables to skip
iptables-compat over nftables support.
三、iptales nat转发
1、配置环境变量
将iptales编译完成的bin目录下文件打包倒usr/sbin文件目录下,将lib文件打包倒usr/lib目录下。添加环境变量。
export XTABLES_LIBDIR=/usr/lib/xtables
export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib
如果没有给环境变量可能会导致iptables 一些操作命令无法正常使用,遇到过 –to-source 的报错
2、配置设备ip
A设备:eth3为usb 4g模块上网,eth0有线网口,假设4g的ip为10.24.131.49
B设备:eth0有线网口
A设备ip配置
netinit 192.168.2.1 255.255.255.0 192.168.2.254
B设备ip配置
netinit 192.168.2.3 255.255.255.0 192.168.2.254
# 打开linux内核的nat转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
#SNAT源地址转换,将来自B设备在这个ip范围内 192.168.2.2/24的地址转换为10.24.131.49
iptables -t nat -A POSTROUTING -s 192.168.2.2/24 -o eth3 -j SNAT --to-source 10.24.131.49
或(4g 5gip可能会发生变化不固定,让系统自动获取ip)
iptables -t nat -A POSTROUTING -s 192.168.2.2/24 -o eth3 -j MASQUERADE
#上网控制,允许192.168.2.1/24范围的ip访问网络
iptables -A FORWARD -s 192.168.2.1/24 -j ACCEPT
#在B设备
ping 192.168.2.1 (ping网关能通)
ping www.baidu.com (可能存在无法ping通,可能由于dns解析配置文件导致,检查配置该 /etc/resolv.cond 文件)
#在A设备,遇到过无法ping通B设备,原因可能是路由表导致,输入route命令,查看路由表
#中显示的默认网关,B设备默认网关应当是192.168.2.1(gateway),(flags)UG。