博客 / 詳情

返回

端口轉發(Linux/Windows)

目的

  • 監聽本機 7777 端口,將數據轉發到 192.168.7.8 的 8888 端口,實現 TCP 數據轉發。

方法一 ncat

  • ncat端口轉發,Linux/Windows 通用
ncat --sh-exec "ncat 192.168.7.8 8888" -l 7777 --keep-open

方法二 netsh(Windows)

  • 設置(port forwarding in windows)
#將本機 7777 端口收到的內容轉發到 192.168.7.8 的 8888 端口
netsh interface portproxy add v4tov4 listenport=7777 listenaddress=0.0.0.0 connectport=8888 connectaddress=192.168.7.8
  • 查看
netsh interface portproxy show all
  • 移除
netsh interface portproxy delete v4tov4 listenport=7777 listenaddress=0.0.0.0

方法三 iptables(Linux)

  • Ubuntu( How-To: Redirecting network traffic to a new IP using IPtables)
  • 清空規則
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
  • 開啓端口轉發(/etc/sysctl.conf)
# 開啓端口轉發
sudo sysctl net.ipv4.ip_forward=1
# 查看
sudo sysctl -a | grep ip_forward
  • 配置端口轉發
# 轉發規則配置(可添加詳細的限制規則)
sudo iptables -t nat -A PREROUTING -p tcp --dport 7777 -j DNAT --to-destination 192.168.7.8:8888
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
# 查看
sudo iptables -t nat -nL
  • MASQUERADE 在 Ubuntu 18.04 下可能引起 dns 服務異常,參見  How to allow DNS lookup with iptables on Ubuntu 18.04 server,可改成如下配置:
# tap0 為轉發出口網卡代號
# 本例為 tap 虛擬網卡
iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE
# OR (192.168.7.1 為虛擬網卡地址)
iptables -t nat -A POSTROUTING -o enp4s0 -j SNAT --to-source 192.168.7.1
  • 移除示例
# 查看
sudo iptables -t nat -nL --line-numbers
# 移除。最後的數字為加 --line-numbers 參數後 num 顯示的序號
sudo iptables -t nat -D POSTROUTING 1
  • 端口查看
sudo netstat -anpt | grep 7777

可以看到 iptables 端口轉發的連接並不能用 netstat 查看,因為 NAPT 並不需要佔用端口,7777 端口仍然可以被其它程序使用。若需查看,可使用 netstat-nat 或 conntrack 命令。

conntrack -L -p tcp --src-nat
# OR
conntrack -L -n
  • NAPT 為啥不佔用端口:iptables 工作在 OSI 模型的2/3/4層,做端口轉發時,只需要查看和轉換運輸層的端口號,並不需要佔用。以下摘自《計算機網絡(第5版)》(謝希仁)175頁。
應當指出,從層次的角度看,NAPT 的機制有些特殊。
普通路由器在轉發 IP 數據報時,對於源 IP 地址或目的 IP 地址都是不改變的。但 NAT 路由器在轉發 IP 數據報時,一定要更換其 IP 地址(轉換源 IP 地址或目的 IP 地址)。
其次,普通路由器在轉發分組是,是工作在網絡層。但 NAPT 路由器還要查看和轉換運輸層的端口號,而這本來應當屬於運輸層的範疇。也正因為這樣,NAPT 曾遭受一些人的批評,認為 NAPT 的操作沒有嚴格按照層次的關係。
本文出自 qbit snap
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.