为什么我的 NAT 设置有时能正常工作?

为什么我的 NAT 设置有时能正常工作?

家庭作业...

本地网络中有 3 台计算机:(192.168.0.185“客户端”)、192.168.0.129(“网关”)和192.168.0.81(“服务器”)。 “服务器”正在运行 HTTP 服务器,因此192.168.0.81从其他两台计算机中的任何一台在浏览器的地址栏中键入都会显示一个网页。

任务是在所谓的“网关”中设置 NAT,以便192.168.0.129在“客户端”浏览器中输入其 IP 地址 ( ) 将显示“服务器”提供服务的网页。这是我的解决方案尝试:

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING -p tcp -d 192.168.0.129 --dport 80 -j DNAT --to 192.168.0.81:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.81 --dport 80 -j SNAT --to 192.168.0.129:80

这(我希望)将使“网关”将对其发出的请求重定向到“服务器”(DNAT),同时将请求的源地址替换为自己的源地址,以便“服务器”通过“网关”正确发送响应而不是直接发送给“客户端”(SNAT)。

我在“客户端浏览器的地址栏中”输入了“网关的 IP”。万岁!我看到网页了!我以为我已经完成了!

但我不是。然后我在“客户端”上重新加载页面。我收到超时错误。我再次重新加载页面。又超时了。我等了一小会儿,然后再次重新加载。此页面网页已正确提供。所以我最后一次重新加载并且......超时。

这让我很困惑。似乎一旦提供了一个页面,事情就会停止工作一段时间。为什么会发生这种情况?我的错误在哪里?

我应该注意,在“客户端”浏览器中输入“服务器地址”(而不是输入“网关地址”)不会导致此类问题。

答案1

我想我终于明白了。罪魁祸首是这一行:

iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.81 --dport 80 -j SNAT --to 192.168.0.129:80

当我将其更改为以下内容时,事情开始起作用:

iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.81 --dport 80 -j SNAT --to 192.168.0.129

不知道为什么,但我有一个模糊的想法,NAT 使用端口来识别连接。因此,当有超过 1 个请求时,仅指定一个端口会导致冲突。

答案2

我有一台装有Debian的PC,用作路由器,可以与您分享一些经验。

路由

如果您有意将主机用作路由器,请不要这样做

echo 1 > /proc/sys/net/ipv4/ip_forward

相反,执行以下任一操作:

  • sysctl -w net.ipv4.ip_forward=1
  • nano /etc/sysctl.conf:
    • 并编辑net.ipv4.ip_forward = 1

转发

哦,我刚刚注意到你可以提供以下内容一切几乎没有魔法。这只是生产答案 - 现在由您来挖掘内部配置(谷歌岸墙源- 然后你就会知道iptables解析器/生成器是如何工作的)

接下来我可以建议一些网络敏网络界面来玩它 - 你访问192.168.0.81:10000现在你没有理由学习命令行 - 所有 iptables 的东西现在都是通过 Web 界面完成的! ;) 还可以阅读它的 shell 脚本,现在就知道生产环境是如何工作的!

记录

webmin 做了所有的事情,但如果你使用 Debian 并且想要一个控制台日志 - 只需输入apt install iftop(谷歌iftop来源,阅读,教育)


如果您发现我的时间并且此信息有用,请随意喜欢并接受这篇文章!

相关内容