我正在尝试一些东西,因此这是我的测试设置:
设置:
- 我有一个带有公共子网和私有子网的 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 A
0.0.0.0/0
- 我有
port 80
以下访问权限host A
:10.0.1.0/24
- 我有来自的传入
port 80
访问权限host B
host 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