Linux

製作 CentOS 7.xa 埠轉發 NAT 設備

  • November 19, 2014

我想讓 CentOS 成為使用 iptables 的埠轉發 NAT 機器。這是我第一次嘗試這個,我想我可能需要一點幫助。

這是我想要實現的配置。我正在嘗試通過埠 80 上的 CentOS 機器建立遠端桌面連接,並讓 CentOS 連接到埠 80 上的伺服器。

192.168.0.120 是應該通過連接到埠 80 上的 192.168.0.100 (CentOS) 來連接到 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

到目前為止我嘗試了什麼:

  1. 禁用 SELINUX
  2. 在 /etc/sysctl.conf 中啟用 IPv4 轉發
/etc/sysctl.conf
net.ipv4.ip_forward = 1
  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 規則有什麼問題嗎?或者有什麼我可能會錯過的嗎?

無論如何,你錯過了一個 FORWARD RULE

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

在 RedHat Entrprise Linux 7.0(CentOS 7.0 的“上游”)中,預期的互動iptables是通過firewalld. 如果可能,手動修改iptables配置不是互動的預期方法。

如果您確實想iptables直接修改配置,您可能需要查看有關iptables. 您正在走正確的道路,但例如,-iand-o參數旨在表示入口和出口介面(eth0等),而不是主機名。看起來你只需要一些關於如何iptables工作的背景知識。

引用自:https://serverfault.com/questions/645431