使用 iptables 进行基于端口的 NAT

使用 iptables 进行基于端口的 NAT

eth0端口上我们有公共 IP,并且eth1我们有10.31.0.1提供 DHCP 和 Squid 服务的 IP。

端口 8080、53、67、80、443 已打开。现在,对于应用程序,我们必须打开 1521、8443 端口,以便它可以访问远程服务器 1521、8443 端口。

但仅仅打开端口并不能帮助我们连接到远程服务器。所以我们需要为这个特定的端口请求启用 NAT。iptable我们可以通过什么命令来实现基于端口的 NAT?

答案1

您可能需要阅读一些文档,因为 netfilter/iptables 可能很棘手。这里有一些不错的文档,尽管有点过时。

对于您需要执行的操作,您需要在 nat 表中添加一条规则,然后才能到达路由代码,因此需要 PREROUTING。这是因为在路由决策之后,它已经决定该数据包是发往您的路由器而不是真实服务器的。

你需要这样的东西:

# iptables -t nat -A PREROUTING -p tcp --dport 1521 -i eth0 \
  -j DNAT --to 5.6.7.8:1521

将其替换为将接收数据包的机器的 IP 地址。

答案2

按着这些次序:

  1. 在内核中启用IP转发:

    echo 1 > /proc/sys/net/ipv4/ip_forward

  2. 刷新转发规则:

    iptables -F FORWARD

  3. 设置只有特定端口从此 LAN IP 范围进行 NAT:

    iptables -t nat -A POSTROUTING -o eth0 -s 10.31.0.0/16 -p tcp --dports 1521,8443 MASQUERADE

相关内容