フォールバックのために、異なるインターフェース(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
通常のテーブルを検索するエントリに対する例外として、エントリ32764
etを検討します。32765
32766
main
これで完了です。以前のコマンドは意図したとおりに機能し、オプションで送信元 IP を指定すると、両方のルートが同時に機能できるようになります-b
。
送信元 IP を指定しないと、システムは追加のルールとルーティング テーブルをすぐには照合せず、メイン テーブルの使用時に行われた選択をデフォルトとして使用します。つまり、最初に一致したルートが優先され、192.168.1.200
現在の設定で送信元が選択されます。
もう一度繰り返しますが、送信元IPを明示的に指定しない場合(通常はそうなります)、メインルートは引き続きデフォルトデフォルト ルートと対応するデフォルト ソース IP を設定すると、ルールが適用され32764
、32765
どのような場合でも正しく動作し続けることが保証されます。したがって、メトリックを操作して、どのルートと IP を優先するかを選択できます。
たとえば、wlan0
送信元 IP を指定しない場合に が優先されるようにするには、 のメトリックを に増やして202
のデフォルトルートを設定し、 IP が最初に選択されるようにします。送信元 IP を明示的に指定すると、ルールまたはに直接一致します。以前に確立された接続は「送信元 IP を指定」したものとしてカウントされるため、影響を受けません。eth0
1000
wlan0
32764
32765
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