IPtables:将端口转发至另一台主机不起作用

IPtables:将端口转发至另一台主机不起作用

我正在尝试一些东西,因此这是我的测试设置:

设置:

  • 我有一个带有公共子网和私有子网的 AWS VPC。
  • 我在公共子网中有一个主机,它有一个公共 IP 地址(比如说主机 A
  • 我在私有子网中有一个主机,在端口 80 上运行 nginx(例如主机B带 IP 地址10.0.1.132)

我想做的事

我想通过访问主机 A 从 Internet 访问主机 B 上的 Web 服务器。

如何

我在主机 A 上设置了 IP 转发参数systctl.conf,然后输入以下iptables规则:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.0.1.132:80

问题:

它不工作,当我访问主机 A 的 80 端口时,我无法打开网页

其他信息(关于 AWS VPC 安全组):

  • 我有来自的port 80传入访问权限host A0.0.0.0/0
  • 我有port 80以下访问权限host A10.0.1.0/24
  • 我有来自的传入port 80访问权限host Bhost A

这是内核信息:

# sysctl  -p | grep forward
net.ipv4.ip_forward = 1

另外,我能够通过端口 80 从主机 A telnet 到主机 B 的端口 80。所以这证明我的 AWS 安全组正在按预期运行。

我认为我有些地方做错了IPtables。能帮我找出上述设置中哪里出了问题吗?

答案1

您是否意识到私人主持人应该……

  • …是否有指向路由器的默认路由?
  • …被 SNAT 处理,以便其回复能够返回?

答案2

我认为 IPtables 部分出了问题。能否帮我找出上述设置中存在的问题。

正确,流量将通过 Amazon 安全组,但随后会被 IPTables 阻止。您需要一条接受 NAT 流量的转发规则:

iptables -A FORWARD -p tcp -m tcp -d 10.0.1.132:80 -j ACCEPT

请注意,-A 可能不正确,您可能需要 -I(插入),然后在“FORWARD”后提供一个数字,该数字表示您想要在 FORWARD 链中插入规则的位置。(即在任何 DROP 之前)您可以使用以下命令列出您的 FORWARD 链

iptables -L FORWARD -n --line-numbers

相关内容