如何在 iptables 中使用 NAT

如何在 iptables 中使用 NAT

我为我的服务器设置了一个域,假设example.com该域由我的路由器转发并链接到我的外部 IP,11.111.111.111如果我 ping 该域或进行查找,它会正常工作,它会识别它并提供给我该域的外部 IP。但是当我监听我设置为允许的任何端口时,它说它们已关闭。我应该设置什么规则才能将其正确转发到我的路由器?

eth0 是我的静态内部接口,它是我的环回。

网关:192.168.0.1

ifconfig:
eth0      Link encap:Ethernet  HWaddr 00:0e:7f:a9:10:54  
          inet addr:192.168.0.8  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20e:7fff:fea9:1054/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8175 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5730 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6186702 (6.1 MB)  TX bytes:1444662 (1.4 MB)
          Interrupt:20 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

答案1

如果您的 LAN 位于具有 NAT 的路由器后面,则可以将指向路由器公共 IP 地址的端口转发到 LAN 中的私有地址和端口。

你也可以为局域网中的某台机器设置通常称为 DMZ 之类的东西。然后所有端口都将转发到该机器。

所有这些都必须在路由器上完成,而不是在本地服务器上完成iptables。它将iptables连接到您的机器,而不是通过 NAT。

通常,在 LAN 之外使用路由器的公共 IP 地址时,这种方法效果不错。在 LAN 中使用服务器私有地址时,这种方法也有效。但是,如果在 LAN 内部使用公共地址,通常会出现连接问题,因为路由器会混淆。有解决方案可以在路由器/NAT 中添加 IP 规则,这样这种方法就可以正常工作,但随后您又会遇到其他问题。

是的,NAT 是一种糟糕的黑客技术,这只是 NAT 的一个小问题。真正的解决方案是使用 IPv6。

要分析这一点,您需要一台与服务器位于同一 LAN 内的机器和 LAN 外的另一台机器。您应该使用nmap带有 的服务器localhost、本地机器并使用私有和全局地址连接到服务器,最后从 LAN 外的机器连接到服务器/路由器的全局地址。还可以尝试traceroute使用私有和全局地址从本地机器连接到服务器。要进行更详细的分析,请使用wiresharkLAN 中的战略点。

相关内容