複数のインターフェース eth0 wlan0 経由でインターネットに ssh する

複数のインターフェース eth0 wlan0 経由でインターネットに ssh する

フォールバックのために、異なるインターフェース(Raspberry Pi と Raspbian Strech 上)を介して複数のリバース SSH トンネルを開こうとしています。

そうは言っても、異なるインターフェースを介して発信 SSH 接続を開く際に問題があります。現在、次の問題があります:

  • eth0 を静的 IP として使用 (192.168.1.200)
  • wlan0 経由 DHCP (192.168.178.100)

ssh を IP アドレスにバインドすると、「eth0」では機能しますが、「wlan0」では機能しません。

  • ssh -b 192.168.1.200 user@externalipは働いている
  • ssh -b 192.168.178.100 user@externalipない働く

それ以外にも、両方のインターフェース経由でインターネットへのトレースルートを実行できます。

  • ssh -b 192.168.1.200 user@externalipは働いている

sudo traceroute -i wlan0 google.com

traceroute to google.com (172.217.21.14), 30 hops max, 60 byte packets
 1  192.168.178.1 (192.168.178.1)  12.528 ms  17.229 ms  21.757 ms
 2  192.0.0.1 (192.0.0.1)  26.576 ms  41.445 ms  47.408 ms ...
  ...

sudo トレースルート -i eth0 google.com

traceroute to google.com (172.217.21.14), 30 hops max, 60 byte packets
 1  192.168.1.1 (192.168.1.1)  0.537 ms  0.404 ms  0.570 ms
  ...

両方のインターフェースで SSH を動作させる方法をご存知ですか?

ルート-n:

0.0.0.0         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
0.0.0.0         192.168.178.1   0.0.0.0         UG    303    0        0 wlan0
192.168.0.0     0.0.0.0         255.255.252.0   U     202    0        0 eth0
192.168.178.0   0.0.0.0         255.255.255.0   U     303    0        0 wlan0

答え1

デフォルトでは、(メイン)ルーティングテーブルの最初の一致するエントリのみが宛先へのルートを決定するために使用されます。さらに、この一致するエントリで受信されなかったパケットは、rp_filter

セットアップにはポリシー ルーティングが必要です。複数のルーティング テーブルに複数のルートを保存し、ソースに応じて適切なテーブル (つまりルート) を選択することで、ルートは宛先だけでなくソースにも依存する必要があります。前のステートメントはそのまま当てはまります。テーブル内の最初の一致するルートが選択されますが、別のテーブルから選択される場合もあります。

したがって、最初に追加のルーティング テーブル (「任意に」選択されたテーブル値) を設定して、テーブルのみを使用した場合では機能しなかったものを補完しますmain

ip route add table 1921681    default via 192.168.1.1 dev eth0
ip route add table 192168178  default via 192.168.178.1 dev wlan0

次に、適切なソースセレクタを使用して適切なテーブルを選択します。ip ruleここでは、新しいルールが 1 つだけで十分ですが、対称性を保つために、両方が追加され、たとえばメトリックを変更する場合など、メイン ルーティング テーブルの柔軟性が向上します (後述)。

ip rule add from 192.168.0.0/22   lookup 1921681
ip rule add from 192.168.178.0/24 lookup 192168178

現在のルールは次のとおりです。

# ip rule
0:  from all lookup local 
32764:  from 192.168.178.0/24 lookup 192168178 
32765:  from 192.168.0.0/22 lookup 1921681 
32766:  from all lookup main 
32767:  from all lookup default 

通常のテーブルを検索するエントリに対する例外として、エントリ32764etを検討します。3276532766main

これで完了です。以前のコマンドは意図したとおりに機能し、オプションで送信元 IP を指定すると、両方のルートが同時に機能できるようになります-b

送信元 IP を指定しないと、システムは追加のルールとルーティング テーブルをすぐには照合せず、メイン テーブルの使用時に行われた選択をデフォルトとして使用します。つまり、最初に一致したルートが優先され、192.168.1.200現在の設定で送信元が選択されます。

もう一度繰り返しますが、送信元IPを明示的に指定しない場合(通常はそうなります)、メインルートは引き続きデフォルトデフォルト ルートと対応するデフォルト ソース IP を設定すると、ルールが適用され3276432765どのような場合でも正しく動作し続けることが保証されます。したがって、メトリックを操作して、どのルートと IP を優先するかを選択できます。

たとえば、wlan0送信元 IP を指定しない場合に が優先されるようにするには、 のメトリックを に増やして202のデフォルトルートを設定し、 IP が最初に選択されるようにします。送信元 IP を明示的に指定すると、ルールまたはに直接一致します。以前に確立された接続は「送信元 IP を指定」したものとしてカウントされるため、影響を受けません。eth01000wlan03276432765

ip route add default via 192.168.1.1 dev eth0 metric 1000
ip route del default via 192.168.1.1 dev eth0 metric 202

追加の注意事項:

  • (通常の) テーブル内のすべてのデフォルト ルートを削除しないでください。アプリケーションが送信元 IP (" ")mainを指定していない場合、接続が確立されなくなります。Network is unreachable
  • 2 つの異なるネットワークで同じ IP を使用するなど、より複雑なケースも可能ですが、この場合は追加の設定が必要になり、おそらく netfilter と の支援が必要になりますiptables
  • これらのルートをロードバランスすることも可能です。iptablesそしてマークそして、それらのマークをセレクターとして使用しますがip rule、ソースIPが指定されている接続とシステムによって選択されるソースIPが混在する接続、特にUDPの場合、すべてのケースで正しく動作させるのはより複雑です。また、NATの不自然な使用と緩めが必要になる可能性があります。rp_filter

答え2

インターフェースが有効になっていることを確認してください

ip link set dev eth0 up
ip link set dev wlan0 up

関連情報