私が知っている限り、再起動せずにespn0をeth0に変更するには、スクリプトを使用して次のことを実行できます。
#!/bin/bash
ip link set espn0 down
ip link set espn0 name eth0
ip link set eth0 up
通常のデスクトップで完璧に動作します。ただし、ssh
上記のスクリプトを実行したときにのみアクセスできるサーバーの場合、
最初の声明から始めると、次のようになります。
ip link set espn0 down
これにより、サーバーのインターネット接続が失われ、SSH ログインへの接続が失われました。
それでは、特にSSH経由で接続している場合は、再起動せずにインターネット接続を切断せずにespn0インターフェイスをeth0に変更するにはどうすればよいですか?可能ですか?
答え1
アドレスが192.0.2.2/24でゲートウェイが192.0.2.1のシステムで問題が発生します(アクセスできなくなった場合)。
# ip route
default via 192.0.2.1 dev espn0
192.0.2.0/24 dev espn0 proto kernel scope link src 192.0.2.2
# ip link set espn0 down
# ip link set espn0 name eth0
# ip link set eth0 up
# ip route
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.2
LANパスは、ルーティング時にカーネルによってアドレスから自動的に再追加されますが、デフォルトproto kernel
ルーティングのメカニズムはありません。デフォルトのパスがない場合、接続は切断されます。
ほとんど使用しない機能を使用することをお勧めしますip route
: ip route save
/ ip route restore
:
ip route save
ルーティングテーブル情報をstdoutに保存するこのコマンドは、出力が ip Route Restore に渡すのに適した生データであることを除けば、ip Route show と同様に機能します。
そして:
ip route restore
stdinからルーティングテーブル情報を復元するこのコマンドは、ip Route saveから返されたデータストリームを読み取ることを期待しています。ルーティングテーブル情報を保存時の状態に正確に復元しようとするため、ストリームの情報(デバイスインデックスなど)の変換は最初に完了する必要があります。既存のパスは変更されません。テーブルにすでに存在するフローに指定されたパスは無視されます。
これは、インターフェイス名ではなくインターフェイスインデックスを使用して内部ルーティングが処理され、ここに格納されるため、ここで機能します。インターフェイス名を変更しても、そのインデックスは変更されません。
スクリプトの使用:
ip route save default > /tmp/mysaveddefaultroute
ip link set espn0 down
ip link set espn0 name eth0
ip link set eth0 up
ip route restore < /tmp/mysaveddefaultroute
ついに:
# ip route
default via 192.0.2.1 dev eth0
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.2
指示:
- 確認するファイアウォール関連ルール
- スクリプトが何も出力すると出力できない状態になることがあります。その後、バックグラウンドでスクリプトを実行する必要があります。
- システムに処理する必要がある他のパスがある可能性があります。適応する
- DHCPを使用している可能性があります。 DHCPを使用している場合、DHCPを再設定しないと正しく機能しません。たとえば、特定のDHCPイベントが発生すると、突然アクセスできなくなります。
答え2
nohupを介してスクリプトを実行し、バックグラウンドにドロップして接続が切断された場合でも、スクリプトを実行し続けることもできます。
例えば nohup ./myscript &