
私はパブリック IP を持つ VPS 上で openvpn サーバーを実行しています。VPN に接続されたバックエンド サーバーがあります。VPN 上の IP は次のとおりです: VPS: 10.8.0.1 バックエンド サーバー: 10.8.0.2。eth0 はパブリック インターフェイス、tun0 は VPN インターフェイスです。
ここで、たとえば、バックエンド サーバーのポート 22 を VPS のポート 2200 に転送したいと思います。VPS で実行した操作は次のとおりです (いくつかのチュートリアルと既に寄せられた質問に基づいています)。
- ポート2200を開いた
- IPv4転送を有効にする
これを /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 マスカレード
ufw をリロードしたり、すべてを再起動したりしました...
いくつかの行をコメントアウトするなど、他の解決策を試しました (上記の最初の 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