iptables:ポートからの着信TCPトラフィックをVPNネットワーク内のIPにルーティングします。

iptables:ポートからの着信TCPトラフィックをVPNネットワーク内のIPにルーティングします。

ポートが開いているリモートサーバーがあります。サーバーがVPNネットワークに接続されています。私のローカルコンピュータもこのVPNネットワークに接続されています。この方法で両方のコンピュータが通信できます。

私がやりたいことは、私のローカルコンピュータでhttp(websocket)サーバーをホストし、私のサーバーのIPアドレスにアクセスしてインターネットからそのサーバーにアクセスしたいと思います。

次のコマンドを試しましたが、うまくiptablesいかないようです。

iptables -t nat -A PREROUTING -p tcp --dport $SERVER_PORT -j DNAT --to-destination $LOCAL_MACHINE_VPN_ADDRESS:$SERVER_PORT
iptables -t nat -A POSTROUTING -p tcp -d $LOCAL_MACHINE_VPN_ADDRESS --dport $SERVER_PORT -j SNAT --to-source $SERVER_LOCAL_NETWORK_ADDRESS

私の例の正確な値は次のとおりです。

SERVER_PORT=6767
LOCAL_MACHINE_VPN_ADDRESS=10.0.1.255
SERVER_LOCAL_NETWORK_ADDRESS=193.108.113.52

インターフェースの下のコマンドをSERVER_LOCAL_NETWORK_ADDRESS読みました。次の文字列があります。ip addreth0inet 193.108.113.52/24 scope global eth0

私はここで少し迷子になりました。どのような方法で明示的に設定してeth0インタフェースする必要がありますか?wg0

私が確信していることの1つはVPN設定です。nginxこのサーバーでVPNを実行し、ローカルコンピュータにプロキシしており、うまく動作します。

ベストアンサー1

eth0インターフェースの下のコマンドを読みましたSERVER_LOCAL_NETWORK_ADDRESSip addr次の文字列がありますinet 193.108.113.52/24 scope global eth0

VPN内でパケットをルーティングしようとしていて、通常のインターネットアクセス(ホームルータなど)以外のパブリックIPアドレスを受信できるように、LOCAL_MACHINEに特別なルーティング調整がないため、WireGuardには特別なルーティング調整はありません。これを許可するように設定を調整してください。 POSTROUTINGiptablesSERVERのコマンドは、アドレスをパブリックアドレスではなくローカルWireGuardトンネルアドレスに設定する必要があります。上記の情報は不要で動作しません。

代わりに使用してください-j MASQUERADE(リモートサーバーのWireGuardアドレスがわからないので、10.0.1.1と同じかもしれないし、そうでなければアドレス変更を提案するかもしれません-j SNAT)。したがって、iptables以下の最後のコマンドは次のようになります。

iptables -t nat -A POSTROUTING -p tcp -d $LOCAL_MACHINE_VPN_ADDRESS --dport $SERVER_PORT -j SNAT --to-source $SERVER_LOCAL_NETWORK_ADDRESS

次に交換する必要があります。

iptables -t nat -A POSTROUTING -p tcp -d $LOCAL_MACHINE_VPN_ADDRESS --dport $SERVER_PORT -j MASQUERADE

メモ:

すべての場合で SNAT または MASQUERADE を実行すると、Websocket サービスはインターネットクライアントの実際の IP アドレスを表示できません。そのアドレスは常にリモートサーバーのアドレスです。

Webソケットサービスがインターネットクライアントの実際の公開アドレスを表示するにはルーティング、関連ポリシーベースのルーティングこれで、LOCAL_MACHINEはNATを使用する代わりにマルチホームでなければならないからです。これを行うには、何を変更するかを知るために提供されていないWireGuard設定を含む、リモートサーバーとローカルサーバーのネットワーク構成全体を理解する必要があります。

注意してください。iptables(またはnftablesまたはWebフィルタ) はルーティングされません。これにより、ルートに関連付けられているアドレスやその他の属性を変更でき、ルーティングスタックがそれを確認する前にこの変更が完了したら、間接的にルーティング決定を変更できます(例:PREROUTING)。実際のルーティングはをip route使用して行われ、ポリシーベースのルーティングの場合はを使用するか、ip ruleネットワーク構成ツールを使用してこれらのコマンドと同じことを実行できます。

おすすめ記事