再起動せずにデフォルトのMac OSXルーティングテーブルをリロードする方法


71

ご挨拶、

vpncVPNクライアントに使用しています。またroute、ローカルネットワークなどに引き続きアクセスできるようにするために、いくつかのトリッキーなことも行っています(ここの詳細はあまり重要ではありません)。

ルーティングテーブルを取得することがあるので、ジャッキアップするとping: sendto: Network is unreachable解決しないURL を取得できます。

現在、Mac OS Xを再起動すると、すべてが正常に戻ります。システム全体をリブートせずに、ルーティングテーブルを「デフォルト」にリセットする(ブート時に設定するなど)

ステップ1はroute flush(すべてのルートを削除する)と思います。そして、ステップ2はすべてのデフォルトルートをリロードする必要があります。

これを行う方法についての考えはありますか?(たとえば、ステップ2とは何ですか?)

編集 また、traceroute問題のアドレスで別の症状も失敗することに気づいています。例えば:

traceroute the.good.dns.name

traceroute: bind: Can't assign requested address

回答:


64

ルートをフラッシュする必要があります。route -n flushを数回使用します。その後、ルートを追加してルートを追加します。


1
これを承認済みの回答に変更しました。できます!私はなかったroute -n flushいくつかの回は、その後、私はシステム環境設定を経由して私のネットワーキングを再起動します。それだけ:)戻ってきて、これを理解するために年かかった
ネイト・マレー

SonicwallのAventail Connect VPNクライアントでは、特にワイヤレスネットワークを切り替えるときに「要求されたアドレスを割り当てることができません」というエラーが特に発生しやすいという問題を解決しました。これで、電源の再投入を回避しない解決方法があります。ありがとう!
アランドネリー

うわー!また、BarracudaVPNの問題にも役立ちました。Wi-Fiのオン/オフを切り替えて、ようやく再接続できました。どうもありがとう!
hans_meine

19

ホームOpenVPNサーバーを使用していて、MacのTunnelblickアプリケーションを使用して接続するときに、この問題に遭遇しました。

私の側で起こっていたのは、ホームIPを宛先とするルートと、VPNから切断した後に誤ったゲートウェイが残ったということです。このルートを削除することで、単純に問題が解決しました

$ sudo route -n delete the.good.dns.name

例:私は学校にいて、コンピューターを新しく起動した後、ワイヤレスネットワークに接続します。Tunnelblickで自宅のOpenVPNサーバーに接続します。

$ netstat -nr
Destination                   Gateway
....
[home-ip]/32                  [school-default-gateway-1] ....
....

VPNサーバーから切断します。ワイヤレスネットワークを変更します。これにより、デフォルトゲートウェイが変更されます。

$ netstat -nr
Destination                   Gateway
...
[home-ip]/32                  [school-default-gateway-1] ...
...
$ ping [home-ip]
PING [home-ip]: 56 data bytes
ping: sendto: Network is unreachable
ping: sendto: Network is unreachable
Request timeout for icmp_seq 0
...

この状況が発生すると、どのような状況でもホームネットワーク(VPN、pingなど)に接続できなくなります。その後、ルートを削除するだけの場合:

$ sudo route -n delete [home-ip]
delete net [home-ip]
$ ping [home-ip]
PING [home-ip]: 56 data bytes
64 bytes from [home-ip]: icmp_seq=1 ttl=56 time=13.111 ms

正常に動作します。

OpenVPNサーバー/クライアントの設定方法に問題がある可能性がありますが(これが何かを知りたいのですが)、このルートの削除を自動化するTunnelblickポストディスコネクトスクリプトをインストールしました。


私は実際にここで同様の問題を抱えています。本当に忌々しい。
トム・バズビー

ovpnスクリプトの例でも、同じ問題に直面しています。私が見つけた唯一の解決策はOPと同じで、切断後のスクリプトでルートを削除することです:/
jklp

切断するたびにこのスクリプトを自動的に実行する方法はありますか?
ホワイトキャット

@Whitecatはい!これをチェックしてください:superuser.com/a/1305361
Elad Nava

13

まず、ネットワークインターフェイスのルートが必要です。VPNが切断されている場合は、ネットワークインターフェースを停止し、ifconfigを使用して再起動します。次に、ルートコマンドを使用してデフォルトのgwをビルドします。のようなもの:

ifconfig en0 down

ifconfig en0 up

route add <ip address> default


1
はい。しかし、Mac OS XはデフォルトルートのIPアドレスをどのように認識しますか?私が本当に見たいのは、Mac OS Xがどのようにブートプロセスを行い、まったく同じことをするかです。
ネイトマレー

1
...?それは... DHCPからそれを取得
ヨルダンEunson

5

私は@Seanと同じ問題に直面していました(OS Xも実行しています)。ホームネットワークと職場ネットワークを切り替えたときに、デフォルトルートが削除されませんでした。

完全を期すために、自宅でVPNに接続して次のコマンドを実行すると、デフォルトゲートウェイが次のように表示されます。

$ netstat -nr
Destination                   Gateway
...
[home-ip]/32                  [work-default-gateway-1]

そして、私が切断したとき、[home-ip]ゲートウェイはまだそこにあります。職場のネットワークに接続すると、インターネットにまったく接続できず、OPと同じ問題が発生します

$ traceroute the.good.dns.name    
$ traceroute: bind: Can't assign requested address

その後、手動でルートを削除する必要があります

$ sudo route -n delete [home-ip]

最初はpost-disconnect.shスクリプトに「route -n delete」を入れましたが、少し面倒だったので、代わりにこのリンクを見つけました

https://code.google.com/p/tunnelblick/issues/detail?id=177

どうやらその理由は私の.ovpnファイルに次のものを設定するためです

user nobody
group nogroup

つまり、ルートはルートとして設定されますが、接続が切断されるとユーザーはルートではなくなるため、ルートを削除できません。

.ovpnファイル内のこれらの2行にコメントを付けると、問題を解決できましたpost-disconnect.sh


おかげで、これも私にとってはうまくいきました。残念ながら、Googleコードのリンクが機能しなくなりました。
トビー

私はあなたの提案を使ってみましたが、問題はVPNに接続するとどこかから設定ファイルを取得し、私の変更を上書きすることです。これらのファイルを変更しても問題が解決しないため、サーバーから取得することはできません。これらのファイルを見つけて破壊/変更できるクライアント側の場所はありますか?
フィンランドの価格

〜/ Libraryを/ Libraryと混同するという些細なエラーを犯していました。おっと!これを読んで、誰のために、あなたは〜/ライブラリ/ Application Support / Tunnelblick /構成/ <vpnname> .tblk /コンテンツ/リソースのファイルを変更したい
Finncent価格
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.