嵌入式开发板利用iptables实现NAT

左心房为你撑大大i 提交于 2020-03-05 19:41:19

  最近为客户写应用程序来测试网卡,客户要求ping自己来检查是否通路,发现ping开发板自己IP时不管插不插自回环网线都能ping通,而我写的测试程序其实就是对ping命令进行的字符串分析,因此这样是不能检测出网卡的通路与否。后来知道ping自己ip时会路由到本地环回的虚网口,数据包根本没有到物理层从网卡发出。因此不管网卡好坏都可以ping通。组长跟我说用iptables命令来做NAT转换ip,可以实现这个功能。

  根文件系统中没有iptables这个命令,因此需要交叉编译下iptables命令:

  下载源码包

  #apt-get source iptables

  解压进入源码包,交叉编译源码的步骤基本都一样,先configure,指定安装目录以及交叉编译目标,然后make   make install

  注意这里指定安装目录的时候最好指定一个路径简单的目录,因为将生成的bin include以及lib放到rootfs中使用时出现一个问题就是运行iptables时找不到SNAT文件。用LD_LIBRARY_PATH指定也不行,后来用strace命令跟踪iptables命令,发现它在查找类似SNAT这些相关的库文件时是按照安装路径的目录来查找的,跟qtopia的安装目录也必须一致是一样的,所以最好安装在路径简单的目录,这样按照同样的路径放到rootfs中就可以使用了,当然,主要是lib下的文件依赖这个路径,bin以及sbin下的可执行程序可以直接放到rootfs下的bin下或者sbin下。


  使用iptables内核还需要一些配置:

Networking —->

  Networking options —->

  [*] Network packet filtering (replaces ipchains)  —>

    Core Netfilter Configuration  —>

      <*> Netfilter Xtables support (required for ip_tables)

    IP: Netfilter Configuration —>

      <*> IPv4 connection tracking support (required for NAT)

      <*> Connection tracking (required for masq/NAT)

      <*> IP tables support (required for filtering/masq/NAT)

      <*>   IP range match support

      <*>   Packet filtering

      <*>     REJECT target support

      <*>   Full NAT

      <*> MASQUERADE target support

      <*> REDIRECT target support

重新编译烧写内核。


    使用iptables命令实现NAT,命令如下:

iptables -t nat -A POSTROUTING -d 172.17.101.188 -j SNAT --to-source 172.17.101.12
iptables -t nat -A PREROUTING -d 172.17.101.188 -j DNAT --to-destination 172.17.101.25

ifconfig eth0 172.17.101.25

echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig eth0 down hw ether 00:01:02:03:04:05 up
arp -s 172.17.101.12 00:01:02:03:04:05 dev eth0
arp -s 172.17.101.25 00:01:02:03:04:05 dev eth0
arp -s 172.17.101.188 00:01:02:03:04:05 dev eth0


这样ping我的原来ip在插网线的情况下可以ping通,而不插网线的情况下就ping不通了

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!