如何在Linux上做基于MAC的一对一NAT?

我有一台运行2NICS(WAN和LAN)的Linux服务器的Linux机器。 我希望LAN端机器使用Linux的盒子作为网关上网(WAN端)。 唯一的问题是LAN端机器将具有静态IP,并且不能configuration为DHCP。 我必须围绕他们的设置工作。 我写了一个运行在服务器上的小程序,监听ARP请求,并将所有客户端stream量和NAT转发到WAN端。 客户现在可以ping谷歌,而不考虑他们的静态IP地址。

我的代码根据MAC地址进行NAT,例如,使用10.0.0.1发送来自XX:YY的客户端数据包。 作为源地址。 ZZ:ZZ的另一个客户端将在WAN侧接口上拥有源地址为10.0.0.2的数据包。 所有这一切的目的是为强制门户用户提供零configuration互联网访问。

我的问题是,我无法获得TCP / HTTP通过我的NAT工作。 GET请求没有得到广域网方面的答复,所以我卡住了,想着替代品!

问题时间:1.可以使用netfilter和IP表来完成吗? 而不是扭转我自己的NAT代码。 2.是否有任何开源的用户空间NAT程序,我可以采取和修改? 3.我可以修改当前的netfilter代码吗? 这将是一个巨大的任务?

我的工具:libpcap,gcc,wir​​eshark,ubuntu服务器10.10

我是新的linuxnetworking编程,任何sujesions将不胜感激。

谢谢,

我不明白为什么使用静态寻址会是一个问题。 Netfilter做本地NAT,并且易于使用iptables构build。

如果“eth0”表示服务器上的LAN侧接口,而WAN侧的eth1则应该执行“iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE”(NAT所需的最小值)。

虽然你可能需要检查默认策略,特别是FORWARD链(iptables -P FORWARD ACCEPT / DROP)。