SSHトンネルがどのネットワークインターフェイスを使用しているかを確認してください。

SSHトンネルがどのネットワークインターフェイスを使用しているかを確認してください。

2つのネットワークインターフェースを持つサーバーがあります。

NATファイアウォールの制限により、インターネット上のサーバーにSSHトンネルを確立します。

ssh -fNTMS "/tmp/tunnel.socket" host;

ssh -S "/tmp/tunnel.socket" -O forward -R "0:localhost:22" placeholder

通常、有線の1GBイーサネット接続(eth0)を介して接続されていますが、オフィスにあり、人々が物事を移動してケーブルが「離れる」可能性があるため、信頼できません(残念ながら接着剤は使用できません)。

また、低速で費用がかかるモバイル4Gインターネット接続(eth1)もあります。

トンネルがまだ正しく機能していることを確認するには、定期的に次の-O checkコマンドを使用します。

ssh -S "/tmp/tunnel.socket" -O check placeholder
  Master running (pid=3430)

echo $?
  0

失敗すると、-O checkソケットが閉じ(通過-O exit)して新しいSSH接続が確立されます。

eth0 ネットワークケーブル「落下」でエラーが発生した場合、Linux は自動的に eth1 を使用します。

これは本当にうまくいきます。

しかし、eth0が再び表示されたら、再びeth0に切り替えたいと思います。

だから私はトンネルが実行中に-O check現在eth1(この質問の焦点)を使用していることを確認し、eth0が戻ってくると再接続できると思います。


路線情報:

ip route
  default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.225 metric 100 
  default via 192.168.2.1 dev eth1 proto dhcp src 192.168.2.241 metric 200

eth1のメトリックは200なので、作業中にeth0が優先順位を持ちます。

何も見つからない/proc/3430/

次の接続を一覧表示できますlsof

lsof -ai -p 3430 -n -P

  COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  ssh     3430 craig    3u  IPv4  69362      0t0  TCP 192.168.1.225:43878->1.1.1.1:22 (ESTABLISHED)

また、netstat -tplnソケットを一覧表示してもインターフェイスは表示されません。

ベストアンサー1

私が使用している可能な解決策は、両側に新しいインターフェースを作成することです。その後、-wスイッチを介して接続されますssh

まず、正しい指標を使用して2つのローカルデフォルトパスを設定する必要があります。何かが変わるたびに(eth0の上または下)接続が切断されますが、これは問題ではありません(続きを読む)。

各サーバーにTunデバイスを作成し、ユーザーがそのデバイスにアクセスできるようにします。次のようになります(相手の住所を変更する必要があります)。

sudo ip tuntap add dev tun3 mode tun user myuser group mygroup
sudo ifconfig tun3 10.9.0.1 pointopoint 10.9.0.2 netmask 255.255.255.255

まあ、もしそうなら

ssh -w3:3 myuser@remote_host

ssh両方のインターフェイスをトンネリングしてpingできます。接続が切断されても問題ありません。デバイスはtun再接続して再開するのを待ちます。

この時点から、eth0または4Gを適切に使用しますが、アドレス(10.9.0.1/10.9.0.2)を保持する「安定した」リンクを介してリモートホストに接続できます。

代わりに、フラグ(モニター)と一緒に(およびキー)をssh使用することをお勧めします。リンク損失を検出して再接続します。autossh-M

これは、完全なVPN(ルーティング、ポリシー、ファイアウォールなどをトンインターフェイスに適用できます)に近いですが、慣れ親しんだ既存のsshVPNを介して機能します。

おすすめ記事