加载中...
iptables网络共享

实现在嵌入式平台内网共享

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

iptables命令使用详解

# 打开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。
上一篇:
openssl交叉编译
下一篇:
链式队列
本文目录
本文目录