私の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を使用していて、イーサネットに再接続すると、トラフィックはシームレスにイーサネットに切り替わります...
それで、私の仮定のどれが間違っていますか?解決策はありますか?
Haukeが言及した解決策は、1つの方法です。このアプローチの欠点は、すべての接続が「阻止」されるまで(有線)イーサネットインターフェイスを接続したままにする必要があることです。
別の、よりスムーズだが少し複雑なアプローチ(たとえば、ルートメトリックスが使用を示唆しているNetworkManagerを使用してこれを実現できるかどうかは今のところわかりません)は、ボンディングを使用してインターフェイスを結合することです。このようにして、有線イーサネット接続を外すと、接続は自動的にWiFiの使用にフェイルオーバーします。
WiFiポートを冗長リンクとして使用する に対する私の回答で、WiFiおよび有線接続のボンディングを構成する方法の詳細についてはすでに説明しました。
イーサネットインターフェイスをブリードアウトする必要があります。 iptables
と高度なルーティングの助けを借りてそれを行うことができます。と
iptables -m conntrack --ctstate NEW
oUTPUTチェーンで新しい接続を見つけて、--set-mark
でマークできます。
ip rule
を使用して、WiFi経由でこのマークの付いたパケットをルーティングできます。
しばらくすると、すべてのトラフィックまたは少なくともほとんどのトラフィックが中断することなくWiFiを使用します。
ルーターを制御する場合は、SNATを使用して永久に続く接続を保存することもできます。