iptables / 元のインターフェイス (eth0) から着信トラフィックを返すためのパス

iptables / 元のインターフェイス (eth0) から着信トラフィックを返すためのパス

私はLinux/IPTABLESを扱い始め、この素晴らしいチュートリアルに従いました。ここRaspBerry Piデバイス(RaspBerryPi OS / Debianを実行)をVPNゲートウェイとして正常に設定しました。同じネットワーク上のすべてのデバイスは手動でネットワーク設定を構成し、そのデバイスのIPアドレスにルーティングを設定できます。その後、デバイスはVPNを介して情報を処理して再送信します(すべて同じネットワーク上)。イーサネット0相互作用)。

私が持っている問題はVPNソフトウェアにあります。Linux用NordVPN削除Tun0VPNの接続を切断またはログアウトすると、インターフェイスが自動的に接続され、ラップトップのインターネットが機能しなくなります。私が理解しているように、これはパケットがまだ転送するように指示されているからです。Tun0インターフェイスがないと、これらのパケットはラップトップに返すことはできません。

すべての着信トラフィックを返すための理想的なプログラムは何ですか?イーサネット0に戻るイーサネット0いつTun0存在しない?

構造:

たとえば、ノートパソコン → raspBerry pi(eth0> tun0> eth0) →ノートパソコン

RaspBerry Piのiptablesは次のとおりです。

sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
sudo iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -i eth0 -p icmp -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -P FORWARD DROP
sudo iptables -P INPUT DROP

これまでの研究により、次のようないくつかの回答が得られました。

https://unix.stackexchange.com/a/322386

常にトラフィックが開始されたインターフェイスからトラフィックを転送します。

ip route add table 2 default via 192.168.0.1おそらく、次のようになります。

答え1

一般的な誤解を修正してください。iptablesルーティングされていません。ルーティングフローが継続可能であるかどうかを制御するだけで、方向は変更されません(変更可能なNATなどを使用しない限り)。ルーティング運命は依然としてルーティングスタックによって行われます。そのため、質問で最も重要なのは、ルートとルーティングテーブルを提供することです(この場合、ルーティングルールも提供する必要があるようです)。

トンネルインターフェイスが消えると、それを使用するすべてのパスも消えます。単一のインターフェイスからルータのパスを取得できます。受信インターフェイスは送信インターフェイスでもあります。イーサネット0

デフォルトのポリシーは転送されたパケットを破棄するため、iptablesを使用してこのフローを有効にするだけです。

sudo iptables -A FORWARD -i eth0 -o eth0 -j ACCEPT

それはあなたが必要とするすべてです。通常、RPi には 192.168.0.1 ルータを使用するようにデフォルトのルートが設定されているため、追加の作業は不要です。パスが標準でない場合は、質問に追加してこの回答を更新する必要があります。

次は小さな文字:

  • ホストノードがRPiを介してパケットを送信すると、RPiはこれが最良の経路ではないことを検出し、いくつかのパケットを再送信します。ICMPリダイレクトパケットは、192.168.0.1 を介して直接、より直接的なパスを使用できることをクライアントに警告します。ノードは情報をキャッシュし、次のパケットをそのルータに直接送信することを選択するか、RPi を使用し続け、RPi は関係なくパケットを転送し続けることができます。実際のルータはレスポンスをホストノードに直接送り返し、非対称ルーティングを生成します。これらのタスクはすべて同じLAN上で発生するため、同じインターフェイスなので問題はなく、この現象は発生しません。厳格なリバースパスの転送どこかに。

  • したがって、この場合、追加のconntrackルールを使用しないでください(既存のルールで十分です)。-m conntrack --ctstate NEW,ESTABLISHEDすべてのパケットと同じではありません。つながるRPiを迂回するパケットはウィンドウ外TCPパケットを引き起こし、これらのパケットはINVALIDとしてマークされます(ただし、転送は許可される必要があります)。

答え2

私はこの答えが嫌いですが、ここにいます。より「クラシック」openVPNベースのNordVPN接続を使用しているようです。wireguardトンネル形式が可能であることをご存知でしたか?

あなたの接続はethertapではなくトンネルなので、接続はおそらく良い選択です。

特典:

  • トンネルが閉じてもトンネルデバイス(ここではwg0)が落ちないようです。
  • 「これを行うか、それを使用するか」タイプのルーティング(およびDNS)決定は、ワイヤガード設定の一部として簡単に設定できます。

私は「その人」になりたくないので、そう見えるかもしれないのでごめんなさい。 NordVPNを新しい接続で起動する場合、これは他のオプションを見て、まだopenVPN設定が最良のオプションであると判断したことを確認するのに最適な機会です。 VTun(Jamesがop​​enVPNで実装したものを実装したくなかったために去った親プロジェクト)の代わりにWGを使用し始めたばかりで、WGがOpenVPNと同じくらい簡単に設定できることがわかりました。迅速で信頼できるトンネルセットを提供します。

しかし、私はマルチホームエージェントボットが「自分が入ってきたのと同じインターフェースから戻りパケットを送信するように」設定を設定しました。これは、基本的にこれを行うWindowsとは異なり、カーネル自体では通常そうではないため、Linuxでは難しいことでした。パケットがどのように入ったか覚えていません。 iprouteトリックを使用してパケットをだましてください。約10年前(CentOS6初期)に初めてボックスを設定したときのメモが見つかるかどうかを見てみましょう。

関連情報