我为我的服务器设置了一个域,假设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
使用私有和全局地址从本地机器连接到服务器。要进行更详细的分析,请使用wireshark
LAN 中的战略点。