iptables實現端口轉發

在這里插入圖片描述

端口轉發順序:

經過linux網關的流量.先PREROUTING(是否改地址)

然后路由,轉發給FORWARD(轉發或者丟棄)

最后經過POSTROUTING(看看改不改地址)

環境準備

機器 A IP:192.168.13.111
機器 B IP:192.168.13.112
目標端口:80
使用iptables實現,訪問A機器的80,可以跳轉到B機器的80端口(nginx)

關閉防火墻 開啟iptables

systemctl stop firewalld
systemctl start iptables

機器A開啟數據轉發

# 臨時開啟
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永久開啟 編輯/etc/sysctl.conf 并添加
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# 執行sysctl -p生效
sysctl -p   

配置iptables規則

# 添加 PREROUTING 規則,將流量轉發到 B 機器
iptables -t nat -I PREROUTING -p tcp -d 192.168.13.111 --dport 80 -j DNAT --to-destination 192.168.13.112:80

-t nat: 指定 NAT 表,用于網絡地址轉換。
-A PREROUTING: 在數據包到達時進行處理,適用于入站流量。
-p tcp: 僅匹配 TCP 協議的數據包。
-d 192.168.13.111: 目標 IP 地址是 192.168.13.111。
--dport 80: 目標端口是 80。
-j DNAT: 使用目標 NAT 規則。
--to-destination 192.168.13.112:80: 將目標地址和端口更改為 192.168.13.112:80。
# 出站流量的 SNAT
iptables -t nat -I POSTROUTING -d 192.168.13.112 -p tcp --dport 80 -j SNAT --to 192.168.13.111
-t nat: 指定 NAT 表。
-A POSTROUTING: 在數據包離開時進行處理,適用于出站流量。
-j MASQUERADE: 偽裝源地址,適用于動態 IP 地址。

機器B準備

機器B安裝nginx 并將頁面內容設置為192.168.13.112

啟動nginx

測試訪問機器B

image-20241001152758528

測試訪問機器A

image-20241001153252573

firewalld實現端口轉發

環境準備

機器 A IP:192.168.13.111
機器 B IP:192.168.13.112
目標端口:80
使用firewalld實現,訪問A機器的80,可以跳轉到B機器的80端口(nginx)

關閉iptables 開啟防火墻

systemctl stop iptables
systemctl start firewalld

機器A開啟數據轉發

# 臨時開啟
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永久開啟 編輯/etc/sysctl.conf 并添加
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# 執行sysctl -p生效
sysctl -p   

配置firewalld規則

# 使用 firewall-cmd 添加端口轉發規則:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" forward-port port=80 protocol=tcp to-addr=192.168.13.112 to-port=80'

--permanent: 確保規則永久生效,重啟后仍然有效。
--add-rich-rule: 添加一條高級規則。
rule family="ipv4": 指定規則適用于 IPv4 協議。
forward-port port=80: 指定源端口為 80protocol=tcp: 僅匹配 TCP 協議。
to-addr=192.168.13.112: 將流量轉發到這個目標 IP 地址。
to-port=80: 將流量轉發到目標的 80 端口。
# 啟用IP偽裝

firewall-cmd --permanent --add-masquerade

--add-masquerade: 允許內部網絡的設備通過 A 機器訪問外部網絡

重載防火墻規則

firewall-cmd --reload

機器B準備

機器B安裝nginx 并將頁面內容設置為192.168.13.112

啟動nginx

測試訪問機器B

image-20241001152758528

測試訪問機器A

image-20241001153252573