バックエンドサーバーへのポート転送

バックエンドサーバーへのポート転送

私はパブリック IP を持つ VPS 上で openvpn サーバーを実行しています。VPN に接続されたバックエンド サーバーがあります。VPN 上の IP は次のとおりです: VPS: 10.8.0.1 バックエンド サーバー: 10.8.0.2。eth0 はパブリック インターフェイス、tun0 は VPN インターフェイスです。

ここで、たとえば、バックエンド サーバーのポート 22 を VPS のポート 2200 に転送したいと思います。VPS で実行した操作は次のとおりです (いくつかのチュートリアルと既に寄せられた質問に基づいています)。

  1. ポート2200を開いた
  2. IPv4転送を有効にする
  3. これを /etc/ufw/before.rules に入力します (はい、私は ufw を使用しており、正常に動作しています)。

    *ナット

    :事前ルーティング受け入れ [0:0]

    :ポストルーティング受け入れ [0:0]

    -A 事前ルーティング -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.8.0.2:22

    -A POSTROUTING -d 10.8.0.2 -p tcp --dport 22 -j SNAT --to-source VPS-public-IP:2200

    -A ポストルーティング -s 10.8.0.0/24 -o eth0 -j マスカレード

  4. ufw をリロードしたり、すべてを再起動したりしました...

  5. いくつかの行をコメントアウトするなど、他の解決策を試しました (上記の最初の POSTROUTING ルールなど)。明らかに何も役に立ちませんでした。

の出力nmap VPS-public-IP -p 2200にはポートが「フィルター処理」されていると表示され、ポート 2200 に ssh しようとすると、ハングして何も起こりません。エラーも表示されません。これは、VPS から VPN 経由でバックエンド サーバーに ssh しようとした場合にも発生します (通常は機能します)。何が足りないのでしょうか?

答え1

まだ解決策を探している人向け。

FORWARDポリシーに応じて(DROPと仮定)

iptables -t nat -A PREROUTING -p tcp -d xx.xx.xxx.xxx --dport 80 
         -j DNAT --to-destination yyy.yyy.yy.yy:80
iptables -A FORWARD  -p tcp -d yyy.yyy.yy.yy --dport 80 -j ACCEPT
Result:  x:80 --> X --y:80--> Y

iptables -t nat -A POSTROUTING -p tcp -d yyy.yyy.yy.yy --dport 80
         -j SNAT --to-source xx.xx.xxx.xxx
Result:  x:80 --> X <--y:80--> Y

iptables -A FORWARD  -p tcp -s yyy.yyy.yy.yy --sport 80 -j ACCEPT
Result:  x:80 <--> X <--y:80--> Y

ローカルで開始された接続に対して、次のルールを追加することもできます: x --> x:80

iptables -t nat -A OUTPUT -p tcp --dport 80 -d xx.xx.xxx.xxx
         -j DNAT --to-destination yyy.yyy.yy.yy:80  
Result:       
  x:80 ->- X <--y:80--> Y
     |_____V

関連情報