web-dev-qa-db-ja.com

デフォルトルートを変更してネットワークインターフェースを変更するために「ip route」を使用する

私のPC(Ubuntu 16.04)はイーサネットケーブルでホームネットワークに接続されています。別の部屋に移動してWifiを使用したい。可能な限りシームレスに切り替えたい(たとえば、VPNの切断を回避するため)。 Wifiとイーサネットの両方に接続できますが、その時点でイーサネットアプリケーションを切断すると、接続エラーが発生します。

だから私は、ワイヤーを切断する前に、トラフィックが強制的にWifiインターフェースを使用する方法が必要だと思います。両方のインターフェースがアクティブな場合、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 

トラフィックはクロールに行きます。

だから私はもう少し微妙で両方のインターフェースをしばらくアクティブにしておかなければならないのだと思いますが、Wifiの1つを優先するものにします。これは、イーサネットのメトリックよりもWifiインターフェースのメトリックを小さくすることで達成できると思います。ただし、私が行う場合:

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

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

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

2
xenoid

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

別の、よりスムーズだが少し複雑なアプローチ(たとえば、ルートメトリックスが使用を示唆しているNetworkManagerを使用してこれを実現できるかどうかは今のところわかりません)は、ボンディングを使用してインターフェイスを結合することです。このようにして、有線イーサネット接続を外すと、接続は自動的にWiFiの使用にフェイルオーバーします。

WiFiポートを冗長リンクとして使用する に対する私の回答で、WiFiおよび有線接続のボンディングを構成する方法の詳細についてはすでに説明しました。

0
Andreas Wiese

イーサネットインターフェイスをブリードアウトする必要があります。 iptablesと高度なルーティングの助けを借りてそれを行うことができます。と

iptables -m conntrack --ctstate NEW

oUTPUTチェーンで新しい接続を見つけて、--set-markでマークできます。

ip ruleを使用して、WiFi経由でこのマークの付いたパケットをルーティングできます。

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

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

0
Hauke Laging