内核支持
需要内核支持,需要重新编译内核。
为了确认生出的.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