iptables交叉编译,手把手教你
[手把手,保姆级]iptables交叉编译
为了能对Linux网卡进行路由配置,可能需要移植一个iptables功能到你的目标板。这里我们来手把手教你,如何交叉编译iptables工具。
准备工作:
1.下载iptables-1.8.9.tar.xz 链接直通车
2. 下载libmnl (git clone git://git.netfilter.org/libmnl)
3. 下载libnftnl (git clone git://git.netfilter.org/libnftnl)
库简单介绍
1.iptables 是一个用于配置 Linux 内核中的防火墙规则的命令行工具。它可以帮助管理员控制进出系统的网络流量,实现网络包过滤、网络地址转换(NAT)和数据包修改等功能。
2.libmnl(Micro Netlink Library) 是一个用户空间库,用于与 Linux 内核通过 Netlink 接口进行通信。
libmnl 是一个用户空间库,用于与 Linux 内核通过 Netlink 接口进行通信。
它提供了一个简单的接口,用于构建和解析 Netlink 消息,这些消息用于与内核进行通信,例如配置网络接口、管理路由表、设置防火墙规则等。
libmnl 可以用于编写应用程序,通过 Netlink 接口与内核网络子系统进行交互,从而实现对网络配置和管理的控制。
3.libnftnl (Netfilter Netlink Library) 是一个用户空间库,用于与 Linux 内核的 Netfilter 子系统进行交互。
Netfilter 是 Linux 内核中的一个框架,用于进行网络数据包过滤和网络地址转换(NAT)等操作。它提供了防火墙功能,允许管理员配置包过滤规则和网络地址转换规则。
libnftnl 提供了一个高级接口,用于构建和解析 Netfilter 规则和对象,以及与内核中的 nftables 工具进行交互。
使用 libnftnl,可以编写应用程序来创建、修改和查询 Netfilter 规则,从而实现对网络数据包过滤和地址转换的控制。
交叉编译
第一个交叉编译libmnl
# 养成好习惯,在libmnl里面创建一个__install文件加来存放最后的输出内容
cd libmnl
mkdir __install
./autogen.sh
# CC=你自己的交叉编译器的路径
./configure --host=arm-linux CC=/home/xx/Desktop/code/H3/armv7-eabihf--glibc--stable-2020.08-1/bin/arm-linux-gcc LDFLAGS=-static --prefix=$PWD/__install
make
make install
第二个交叉编译libnftnl
# 同样,在libnftnl内创建一个__install用于存放输出
cd libnftnl
mkdir __install
./autogen.sh
# 这里有个细节就是需要通过PKG_CONFIG_PATH=指定刚才编译的libmnl的pkg的路径,如果不知道,会提示你No package 'libmnl' found;你当然可以通过设置变量跳过这个功能,但是为了保证其完整性我们做全套。
# 另外这个路径就是刚才编译的libmnl的__install/lib/pkgconfig,只要成功编译就会有这个输出
# 记得把下面的交叉编译器换成你自己的交叉编译器路径
./configure --host=arm-linux CC=/home/xx/Desktop/code/H3/armv7-eabihf--glibc--stable-2020.08-1/bin/arm-linux-gcc LDFLAGS=-static --prefix=$PWD/__install PKG_CONFIG_PATH=/home/xx/Desktop/code/github/test/libmnl/__install/lib/pkgconfig
make
make install
最后编译iptables
# 先解压
tar -xf iptables-1.8.9.tar.xz
cd iptables-1.8.9
mkdir __install
./autogen.sh
# 将libmnl和libnftnl的pkgconfig路径都添加进去才能顺利配置编译
./configure --host=arm-linux CC=/home/xx/Desktop/code/H3/armv7-eabihf--glibc--stable-2020.08-1/bin/arm-linux-gcc --enable-static --disable-shared --prefix=/home/xx/Desktop/code/github/install --disable-ipv6 --disable-largefile PKG_CONFIG_PATH="/home/xx/Desktop/code/github/test/libmnl/__install/lib/pkgconfig:/home/xx/Desktop/code/github/test/libnftnl/__install/lib/pkgconfig"
make
make install
然后可以将sbin,lib拷贝到你的目标板,进行使用。