Linux 配置端口映射


前述

改博文使用的是 iptables 來做端口映射。如果使用的系統是 Centos/Redhat/Fedora 那么需要關閉 firewalld 服務才能成功。
firewall 與 iptables 兩個防火牆的關系,請自行百度。

打開 IP 轉發

打開 IP 轉發(路由器設備是默認打開的),必須允許 IP 轉發,否則即使設置了 nat 映射規則,也是不能發生映射的,因為不開啟轉發,包不能被發過去。

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

從一台機器映射到另一台機器

映射關系 192.168.122.1:80 ---> 192.168.122.221:80
192.168.122.221 在 80 端口開啟了 nginx 服務器
本地鏈路的報文是不需要經過 PREROUTING 與 POSTROUTING 的,所以必須配置 OUTPUT 否則在本機上測試會發現轉發規則無效!

  • 在 192.168.122.1 配置如下規則,然后在 192.168.122.1(本機) 的機器能訪問 “192.168.122.1:80”
iptables -t nat -A OUTPUT -p tcp -d 192.168.122.1 --dport 80 -j DNAT --to 192.168.122.221:80
  • 在 192.168.122.1 配置如下規則,然后在 192.168.122.29(其他設備) 能訪問 ”192.168.122.1:80“
# 配置目的地址轉換
iptables -t nat -A PREROUTING -p tcp -d 192.168.122.1 --dport 80 -j DNAT --to 192.168.122.221:80
# 配置源地址轉換
iptables -t nat -A POSTROUTING -p tcp -d 192.168.122.221 --dport 80 -j SNAT --to 192.168.122.1 

從本機一個端口到另一個端口

映射關系 192.168.122.221:8080 ---> 192.168.122.221:80
本地鏈路上的報文是不需要經過 PREROUTING 與 POSTROUTING 的,所以必須配置 OUTPUT 否則在本機上測試會發現轉發規則無效!
192.168.122.221 在 80 端口開啟了 nginx 服務器

  • 在 192.168.122.221 配置如下規則, 8080 映射到 80,這樣本機能訪問 “127.0.0.1:8080”
iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 8080 -j DNAT --to-port 127.0.0.1:80 
  • 在 192.168.122.221 配置如下規則, 8080 映射到 80,這樣能訪問 “192.168.122.221:8080”
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 80

其他

# 查看 nat 鏈規則
iptables -t nat -L -n --line-number

# 刪除規則 POSTROUTING 的規則 1
iptables -t nat -D POSTROUTING 1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM