
私は3つのデバイスを持っています:
- ネットワーク1に接続されたサーバー
- ネットワーク2に接続されたラップトップ
- Network2に接続されたRaspberry Pi
Network1 には openVPN サーバーもあり、VPN にアクセスするためのポート転送もあります。
Raspi がラップトップから TCP 要求 (サーバー向け) を受信し、VPN 経由でサーバーに送信し、サーバーからの応答をラップトップに返す必要があります。使用されるポートは 1 つだけですが、すべてのポートが転送されても問題ありません。ラップトップにソフトウェアをインストールすることはできません。また、ラップトップにコマンドなどをインストールしないことが望ましいです。
何らかの「ポート転送」が必要ですが、VPNに接続する必要があります
答え1
文字通り同じ「ポート転送」、つまりルーター (RasPi) のファイアウォールの DNAT ルールを使用します。これは、ネットワークの種類に関係なく同じように機能します。
つまり、DNAT
必要な「ポート転送」ごとに、RasPi ファイアウォールに iptables または nftables ルールを追加します。(「転送を許可する」ルールも追加することを忘れないでください。これらはほとんどのルーターでは自動的に行われますが、プレーンな iptables または nftables では自動的に行われません。)
サーバーは、VPN 接続を介して Network2 に戻るルートを持っている必要があります (OpenVPN では、これはおそらくiroute
構成を意味します)。設定が難しい場合は、RasPi に DNAT も実行させるSNAT
か、またはMASQUERADE
DNAT に加えて実行させるという代替策があります。(SNAT/MASQ オプションは、LAN の「NAT ヘアピン」とまったく同じ種類の構成になります。)
nftables の例:
table inet filter { chain forward { type filter hook forward priority filter; ip daddr <ServerIP> accept } } table ip nat { chain prerouting { type nat hook prerouting priority dstnat; iifname "eth0" ip daddr <RasPiIP> tcp dport 80 \ dnat to <ServerIP>:80 } chain postrouting { type nat hook postrouting priority srcnat; oifname "tun0" masquerade } }
iptables の例:
-t filter -I FORWARD -d <ServerIP> -j ACCEPT -t nat -I PREROUTING -i eth0 -d <RasPiIP> -p tcp --dport 80 \ -j DNAT --to-destination <ServerIP>:80 -t nat -I POSTROUTING -o tun0 -j MASQUERADE
代替案: RasPi で「リバース プロキシ」を使用します。ほとんどのリバース プロキシは HTTP/HTTPS 用ですが、任意の TCP または TLS プロトコルをプロキシできます。これは UDP では機能しません (少なくとも簡単には機能しません)。追加のソフトウェアが必要ですが、ルーティング要件は少なくなります。
HTTP/HTTPS サービスの場合、Nginx または Apache httpd が一般的な選択肢であり、他の場所にも広く文書化されています。(どちらの場合も、オプションは「proxy_pass」または「ProxyPass」と呼ばれます。)