![Linux 路由表、隧道和 iptables](https://linux22.com/image/1507771/Linux%20%E8%B7%AF%E7%94%B1%E8%A1%A8%E3%80%81%E9%9A%A7%E9%81%93%E5%92%8C%20iptables.png)
我正在尝试弄清楚所有这些组件是如何协同工作的。
我的主要目标是将流量(端口 80,443)从我的本地主机(Windows 7)网络路由到远程网络上的远程主机。这意味着,我想要转到 10.50.1.2:80 并到达远程主机(端口 4111)。
作为第一步,我尝试使用以下命令向本地 Windows 主机添加路由:
route ADD “10.50.1.0” MASK “255.255.255.0” “remote public ip”.
这不起作用。有人能解释为什么吗?
然后尝试将地址路由到本地 Linux 服务器
route ADD “10.50.1.0” MASK “255.255.255.0” “192.168.10.78”
然后我在预路由中使用 iptables 和 DNAT 将数据包转发到远程公共 IP
iptables -t nat -A PREROUTING -d 10.50.1.2 -dport 80 -j DNAT --to-destination publicIP:80
流量确实到达了 192.168.10.78(通过 tcpdump 验证),但是它们没有到达远程主机。有人能解释一下为什么吗?我甚至尝试在后路由中使用伪装。
然后我开始搜索并遇到了隧道。
谁能解释为什么第一次和第二次尝试没有成功以及隧道技术如何提供帮助?
答案1
你的第一次尝试:
route ADD “10.50.1.0” MASK “255.255.255.0” “remote public ip”
这将为可通过 访问的网络 10.50.0/24 设置路由remote public ip
。私有 IP 通常不会在互联网上路由,您可能能够看到为什么这不起作用。
第二次尝试:
route ADD “10.50.1.0” MASK “255.255.255.0” “192.168.10.78”
通过主机 192.168.10.78 设置 10.50.1.0/24 网络的路由,如果该主机未配置为路由该网络的流量,则它将无处可去,甚至您也无法访问远程计算机。您说您确实配置了 NAT/DNAT,这将使该机器能够执行此操作,但我不确定正确的配置是什么。如果您只是对网络流量感兴趣,也许可以考虑使用代理?
至于隧道,它是将您的原始请求封装在另一个连接中的过程。但您必须更具体地说明您在什么情况下使用它,因为可能会有细微差别,从而产生巨大的差异。