ポート転送(Linux/Windows)


【目的】
本機7777ポートを傍受し、192.168.7.8の8888ポートにデータを転送し、TCPデータ転送を実現する.
【方法】
1、ncat(Linux/Windows共通)(ncatポート転送)
ncat --sh-exec "ncat 192.168.7.8 8888" -l 7777 --keep-open

2、netsh(Windows)(port forwarding in windows)
2.1、設定
#    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

2.2、表示
netsh interface portproxy show all

2.3、除去
netsh interface portproxy delete v4tov4 listenport=7777 listenaddress=0.0.0.0

3、iptables(Ubuntu 16.04)(How-To: Redirecting network traffic to a new IP using IPtables)
3.1、クリアルール
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

3.2、オープンポート転送(/etc/sysctl.conf)
#       
sudo sysctl net.ipv4.ip_forward=1
#   
sudo sysctl -a | grep ip_forward

3.3、ポート転送の構成
#       (          )
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

3.3.1、MASQUERADEはUbuntu 18.04でdnsサービス異常を引き起こす可能性がある.How to allow DNS lookup with iptables on Ubuntu 18.04 serverを参照して、以下の構成に変更することができる.
# tap0          
#     openVPN     
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

3.3、削除例
#  
sudo iptables -t nat -nL --line-numbers
#  。        --line-numbers     num      
sudo iptables -t nat -D POSTROUTING 1

3.4、ポートの表示
sudo netstat -anpt | grep 7777

IPtablesポート転送の接続はnetstatで表示できません.NAPTはポートを占有する必要はありません(なぜですか?)7777ポートは依然として他のプログラムで使用できます.表示するにはnetstat-natコマンドを使用します.
【関連読書】
  • iptables tips
  • ネットワークポートの転送とリダイレクト(Python)
  • WindowsおよびLinuxプラットフォームのポート転送ツール
  • 簡単なTCPプロキシ
  • centos6.5 iptables実装ポート転送
  • ***walkerの流水勘定***