デフォルトパスを変更してネットワークインターフェイスを変更するには、「iproute」を使用します。

デフォルトパスを変更してネットワークインターフェイスを変更するには、「iproute」を使用します。

マイコンピュータ(Ubuntu 16.04)はイーサネットケーブルを介してホームネットワークに接続されています。別の部屋に移動してWifiを使いたいです。移行ができるだけスムーズに進むことを願っています(例:VPNの切断を防ぐ)。 Wi-Fiとイーサネットに接続できますが、この時点でイーサネットアプリを切断すると接続エラーが発生します。

そのため、ワイヤを切断する前にトラフィックがWi-Fiインターフェイスを使用するように強制する方法が必要になります。両方のインターフェイスがイネーブルの場合は、ip route次のようになります。

default via 192.168.0.254 dev enp0s31f6  proto static  metric 100 
default via 192.168.0.254 dev wlp4s0  proto static  metric 600 
192.168.0.0/24 dev enp0s31f6  proto kernel  scope link  src 192.168.0.43  metric 100 
192.168.0.0/24 dev wlp4s0  proto kernel  scope link  src 192.168.0.7  metric 600 

私が使用している場合:

ip route del default via 192.168.0.254 dev enp0s31f6 

トラフィックがクロール速度で遅くなりました。

だから、もう少し微妙に両方のインターフェイスをアクティブに保つが、Wi-Fiインターフェイスを好むインターフェイスにする必要があるようです。私はこれがイーサネットインターフェイスよりもWi-Fiインターフェイスでより小さいメトリックを持つことによって達成されると信じています。しかし、これを行うと:

ip route change default via 192.168.0.254 dev enp0s31f6 proto static metric 600

私は得る:

default via 192.168.0.254 dev enp0s31f6  proto static  metric 100 
default via 192.168.0.254 dev enp0s31f6  proto static  metric 600 

したがって、このコマンドはすべてのインターフェースを指定された指標に置き換えることを示しています。 100 または 600 以外の指標値を使用しようとすると、次の結果が表示されます。

RTNETLINK answers: No such file or directory

もちろん、Wi-Fiを使用してイーサネットに再接続すると、トラフィックはシームレスにイーサネットに切り替わります。

それでは、私の仮定のどれが間違っていますか?解決策はありますか?

答え1

Hauckが述べた解決策は1つのアプローチです。このアプローチの欠点は、すべての接続が「ドレイン」されるまで(有線)イーサネットインターフェイスを接続したままにする必要があることです。

よりスムーズだがより複雑な別のアプローチ(たとえば、ルーティングメトリックによると、現在使用しているNetworkManagerを使用してこれを行うことができるかどうかは不明)は、バインディングを使用してインターフェイスを一緒にバインドすることです。これにより、有線イーサネット接続が切断されると、接続は自動的にWiFiを使用するようにフェイルオーバーします。

私の答えは、WiFiと有線接続ボンディングを設定する方法の詳細な説明を示しています。WiFiポートを冗長リンクとして使用する

答え2

イーサネットインターフェイスを空にする必要があります。iptables高度なルーティングでは、これを行うことができます。そして

iptables -m conntrack --ctstate NEW

OUTPUTチェーンで新しい接続を見つけてマークすることができます--set-mark

これを使用して、ip ruleWiFi経由でこのタグを含むパケットをルーティングできます。

しばらくすると、トラフィックのすべてまたはほとんどが中断することなくWi-Fiを使用します。

ルーターを制御する場合は、SNATを使用して継続的な接続を保存することもできます。

関連情報