iptables交叉编译记事

内核支持

需要内核支持,需要重新编译内核。

为了确认生出的.config文件合适,使用diff命令,不做更改保存.config,确定.config文件是否一致。

以上主要是确定make menuconfig命令所保存的文件属于arm架构的文件。(有些时候,默认使用是的x86架构,所以虽然前面步骤不会出错,但是在make过程中,会有一些问题,导致认为是代码本身的缺陷)

因此需要使用以下:

(sinlinx提供了build.sh文件)

make menuconfig ARCH=arm
做完覆盖.config到arch/arm/configs/sinlinx...之类
./build.sh

在meunconfig中,为了避免问题,提供所有的network options之类的选项,使用*,编译到内核中。尤其注意filter表和nat表之类的相关支持。

交叉编译

不管是什么了,编译代码用下面这句:主要是为了减少一些不必要的麻烦

./configure CC=arm-linux-gnueabihf-gcc 
    --prefix=$(pwd)/__install 
    --host=arm-linux-gnueabihf 
    CFLAGS=-I/usr/local/include 
    LDFLAGS=-L/usr/local/lib 
    --disable-nftables 
    --enable-static 
    --disable-shared 
    --disable-ipv6 
    --disable-largefile

推荐使用交叉编译的iptables版本为:1.8.4吧。问题少一点。

传送门:https://www.netfilter.org/projects/iptables/downloads.html

iptables编译,早期使用的1.4或者1.6版本,或者其它之类,需要注意的问题在于:

so文件问题:部分文件找不到

有时候需要做一些覆盖问题,如某些文件找不到,而又在某路径下,则对应到/lib等目录下!

特殊的问题如,文件名过短等错误,则删除该过短文件,将其重新命名为对应的长文件。

ln -s /opt/lib/libip4tc.so.2.0.0 /lib/libip4tc.so.2
ln -s /opt/lib/libip4tc.so.2.0.0 /lib/libip4tc.so.2
ln -s /opt/lib/libxtables.so.12.0.0 /lib/libxtables.so.12

mv /opt/sbin/xtables-multi /opt/sbin/iptables

  

另外关于--port等命令选项不识别的问题,尝试在做交叉编译过程中使用如上的编译代码。出现该问题当然是一些在lib下的xtables中的so文件没有正确的加入到交叉编译的iptables中。

不过放遍了所有的路径,还是做了以上代码处理。这样,在/lib/xtables中就没有文件了,也许,在里面呢??

另外一些问题是关于xtables本身的。在生出的xtables中:有时候需要将/sbin/multxxx之类的文件,重新命名为iptables,以便运行(删除原来的iptables)。

测试用例

附上测试用例:

iptables -t nat -A PREROUTING -p tcp -d 10.8.0.6 --dport 102 -j DNAT --to 192.168.1.105:102

  

原文地址:https://www.cnblogs.com/bai2018/p/12196309.html