我在具有公共 IP(例如:65.12.12.12)的专用服务器上使用 VirtualBox 创建了一个 Kubernetes 集群。
该集群有一个基于子网 192.168.205.0/24 的内部网络,当我部署 Web 应用程序时,它会为其分配一个该子网的 IP。例如,我部署了一个 helloworld Nginx,它被分配了一个私有 IP 192.168.205.100。
现在,从外部世界来看,我无法使用它,curl 192.168.205.100
因为它是私有的,所以我尝试将公共 IP(65.12.12.12)映射到这个。
所以我这样做了。
sudo iptables -t nat -A PREROUTING -d 65.12.12.12 -p tcp --dport 80 -j DNAT --to-destination 192.168.205.100:80
sudo iptables -t nat -A PREROUTING -d 65.12.12.12 -p tcp --dport 443 -j DNAT --to-destination 192.168.205.100:443
sudo iptables -t nat -A POSTROUTING -o vboxnet1 -j MASQUERADE
现在一切运行顺利。
从外部我可以获得curl
公共 IP 并获取页面,因为它被重定向到私有 IP。
但是,当我在服务器内部时,我无法执行同样的事情,就像它iptables
没有被使用一样。
我究竟做错了什么?
答案1
我究竟做错了什么?
… 抱有期望,但不研究事物如何运作?
本地发起的流量不会像外部流量那样遵循相同的路径。PREROUTING
您需要使用OUTPUT
。
答案2
您正在谈论从内部访问外部资源,但只向我们展示您正在工作的 NAT。
尝试iptables -L -v --line-numbers
打印整个链的配置并向我们展示其他的。:)