设置端口侦听和转发

我知道,关于开放端口和端口转发有很多问题。 我尝试了几乎所有的答案,但是我不能为它工作。

我在虚拟机上运行Kubuntu的全新安装。

我只是想将[myip]:80的所有stream量转发到localhost:8080。 出于testing目的,我使用netcat来监听我的端口。

所以这里是我的完整设置(在这些命令之前,我删除了所有的iptable规则,包括PRE / POSTROUTING):

sudo sysctl -w net.ipv4.ip_forward=1 sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080 sudo iptables -A INPUT -j ACCEPT sudo iptables -A FORWARD -j ACCEPT 

据我了解,现在所有的连接都将被接受,并允许转发(所有连接)。 另外,预路由将把端口80上的所有stream量路由到localhost:8080。

现在我听着:

 sudo nc -l 10.0.2.15 80 sudo nc -l localhost 8080 

我在同一台机器上使用以下命令:

 curl -XPUT http://10.0.2.15:80/ curl -XPUT http://127.0.0.1:8080/ 

从理论上讲,我的第二个听众应该看到两个命令。 实际上,第一个听众会收到第一个命令,第二个听众会收到第二个听众。 如果我从另一台机器尝试curl -XPUT http://10.0.2.15:80/命令将导致拒绝连接错误。 但是我接受与iptablesconfiguration的任何连接,不是吗?

我也用POSTROUTING做了一些实验,但从来没有成功。 我错过了什么? 我现在想尝试3h …感谢您的帮助。

//编辑:我可以成功从另一台机器ping虚拟机。 反之亦然。

好的,我find了解决scheme。 事实certificate,我没有错,但有些失踪:

 sysctl -w net.ipv4.conf.eth0.route_localnet=1 

感谢Ipor Sircer指出,内核会丢弃127.0.0.1的包,并感谢这篇文章 ,指出如何规避这个限制。

因此,如果有人需要做类似的事情(即在虚拟机上设置端口转发到本地主机),那么这里再次使用完整的设置:

 sudo sysctl -w net.ipv4.ip_forward=1 sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080 sudo sysctl -w net.ipv4.conf.eth0.route_localnet=1 

当然,将端口和界面更改为您的设置。 即改变 出口– 到目的地 AND eth0在倒数第二和最后一个命令到您的界面。

还要确保每台机器都可以相互通话 – 通常为了虚拟机,您需要做一些额外的设置。