我想使用 iptables 将 CentOS 变成端口转发 NAT 机器。这是我第一次尝试,我想我可能需要一点帮助。
这是我想要实现的配置。我尝试通过端口 80 上的 CentOS 机器建立远程桌面连接,并让 CentOS 连接到端口 80 上的服务器。
192.168.0.120 是客户端,它应该通过连接到 192.168.0.100(CentOS)的端口 80 来连接到 192.168.30.37 的端口 80。
- CentOS ens160 是 192.168.0.100/24
- CentOS ens192 是 192.168.30.254/24
- CentOS ens224 是 192.168.40.254/24
我到目前为止尝试过的:
- 禁用 SELINUX
在 /etc/sysctl.conf 中启用 IPv4 转发
/etc/sysctl.conf net.ipv4.ip_forward = 1
/etc/systemconfig/iptables 是
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [12:944] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -i ens160 -o ens192 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i ens192 -o ens160 -j ACCEPT -A FORWARD -i ens160 -o ens224 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i ens224 -o ens160 -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT *nat :PREROUTING ACCEPT [4:272] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A PREROUTING -i ens160 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.30.37:80 -A POSTROUTING -o ens160 -j MASQUERADE -A POSTROUTING -d 192.168.0.100/32 -j MASQUERADE COMMIT
那么我的 iptables 规则有什么问题吗?或者我可能遗漏了什么?
答案1
无论如何,你缺少了一条前向规则
iptables -A FORWARD -i ens160 -o ens192 -p tcp -m tcp -d 192.168.30.37 -m state --state NEW -j ACCEPT
您需要在此之前插入上述规则:
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
答案2
在 RedHat Entrprise Linux 7.0(CentOS 7.0 的“上游”)中,预期的交互iptables
是通过firewalld
。手动修改iptables
配置虽然可行,但并不是交互的预期方法。
如果您确实想iptables
直接修改配置,您可能需要查看有关 的文档iptables
。您走的路是对的,但例如,-i
和-o
参数用于表示入口和出口接口(eth0
等),而不是主机名。看来您只需要了解一些iptables
工作原理的背景知识。