iptables交叉编译及使用方法

本文主要讲述linux wifi做中继时使用iptables的方法,及iptables交叉编译时遇到的一些问题
-----再牛逼的梦想,也抵不住傻逼般的坚持! --2024-01-20 13:50

iptables的编译依赖libmnl 库、libnftnl库,因此需要先编译这两个库。
在编译以下开源库时不同编译工具链编译结果可能存在差异(其他编译器可能存在编译不过的情况)

一、libmnl 交叉编译

1.源码获取
https://www.netfilter.org/pub/libmnl/ 下载文件libmnl-1.0.5.tar.bz2(可下载其他版本,个人喜欢在flash资源充足的情况下用最新版本)
2.交叉编译

tar -xvjf libmnl-1.0.5.tar.bz2
cd libmnl-1.0.5
mkdir _install
#ps:host和CC需要修改成自己的,其他版本可能需要先执行autogen.sh脚本
./configure --host=arm-linux-gnueabihf CC=arm-linux-xxx-gcc LDFLAGS=-static --prefix=$PWD/_install
make
make install

二、libnftnl交叉编译

1.源码获取
https://www.netfilter.org/pub/libnftnl/ 下载libnftnl-1.2.6.tar.xz(也可使用其他版本)
2.交叉编译

tar xf libnftnl-1.2.6.tar.xz
cd libnftnl-1.2.6
mkdir _install
#PKG_CONFIG_PATH为libmnl的产物路径libmnl-1.0.5/_install/lib/pkgconfig
./configure --host=arm-linux-gnueabihf CC=arm-linux-xxx-gcc LDFLAGS=-static --prefix=$PWD/_install PKG_CONFIG_PATH=/home/xxx/libmnl-1.0.5/_install/lib/pkgconfig
make
make install

三、iptables交叉编译

1.源码获取
https://www.netfilter.org/pub/iptables/ 下载iptables-1.8.9.tar.xz(也可使用其他版本)
2.交叉编译

tar xf iptables-1.8.9.tar.xz
cd iptables-1.8.9
mkdir _install
./autogen.sh
#PKG_CONFIG_PATH中添加libmnl和libnftnl产物的pkgconfig路径--也可直接加在makefile中
./configure --host=arm-linux-gnueabihf CC=arm-linux-xxx-gcc --enable-static --disable-shared --prefix=$PWD/__install --disable-ipv6 --disable-largefile PKG_CONFIG_PATH="/home/xxx/libmnl-1.0.5/_install/lib/pkgconfig:/home/xxx/libnftnl-1.2.6/_install/lib/pkgconfig"
make
make install

四、iptables的常用命令

#配置启用NAT转发规则 -o配置上行口即sta使用的网卡
1. iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE 
2. iptables -A FORWARD -i wlan0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
3. iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT
4. iptables -nvL -tnat   #查看NAT表的规则列表和统计信息

五、交叉编译过程中常见问题

1.iptables运行提示Fatal: can’t open lock file /run/xtables.lock: No such file or directory
问题原因: iptable使用时会创建/run/xtables.lock文件,需要有权限,设备无/run/目录或者无创建文件权限
修改方法: 需在编译iptables前修改makefile中的XT_LOCK_NAME为文件系统中可创建文件的路径

2.提示iptables v1.8.9 (legacy): can’t initialize iptables table `filter’: Table does not exist (do you need to insmod?)
问题原因: 内核中CONFIG_IP_NF_IPTABLES_FILTER选项未打开
修改方法: 内核编译前,menuconfig开启iptables相关的选项

3.如果iptables配置转发规则成功,但仍不能正常转发网卡的数据包
问题原因: 可能是没有启用ip转发
修改方法: echo 1 > /proc/sys/net/ipv4/ip_forward

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸡蛋炒肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值