在 Azure 上转发外部到内部端口:不接受外部连接

在 Azure 上转发外部到内部端口:不接受外部连接

我在 Azure 上的 Ubuntu 16.04 VM 上运行了一个服务localhost:8111,我正尝试将端口 80 上的外部流量转发到localhost:8111。但是,外部流量被拒绝,我看不出我做错了什么。

在 Ubuntu VM 上,我编辑/etc/sysctl.conf并取消注释了此行:

net.ipv4.ip_forward=1

重新启动后,我在 iptables 中添加了以下内容,以便可以从内部和外部访问端口 80:

$ sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8111
$ sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8111

完成此操作后,我可以验证端口是否正常工作在 Ubuntu VM 中使用curl http://localhost:80并通过使用外部地址curl http://example.org

但是,我无法http://example.org从互联网访问。

我将 AzureNetwork Interface连接到虚拟机,设置为 10.0.1.5,它有一个静态公共 IP,并IP Forwarding设置为enabled。它连接到一个 NSG,允许端口 80 上的any源和any目标流量

我认为这应该可行---我看不出我做错了什么。

以下是 的输出iptables -t nat --list

~$ sudo iptables -t nat --list
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8111

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8111

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

答案1

我们还需要做另外一项更改:

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

默认情况下,该值为 0,指示内核不路由发往 127.0.0.0/8 的外部流量。这只是为了安全,因为这样的流量并不正常。

iptables 规则如下:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8111

这是我的测试:

Ubuntu 16.04:

私有 IP 地址:10.0.1.4
公有 IP 地址:104.41.185.158
apache2 监听本地主机端口 8111

root@jasonvm:/etc/apache2# netstat -ant | grep 8111
tcp        0      0 127.0.0.1:8111          0.0.0.0:*               LISTEN  

结果如下:

在此处输入图片描述

希望这可以帮助。

相关内容