Как перезагрузить таблицу маршрутизации Mac OSX по умолчанию без перезагрузки

71

Приветствую,

Я использую vpncдля VPN-клиента. Я также делаю некоторые хитрые вещи, routeчтобы убедиться, что я все еще могу получить доступ к своей локальной сети и т. Д. И т. Д. (Подробности здесь не очень важны).

Иногда я получаю таблицу маршрутизации настолько измученной, что получаю ping: sendto: Network is unreachableURL-адреса, которые в противном случае должны разрешиться.

В настоящее время, если я перезагружаю 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 несколько раз. Затем добавьте ваши маршруты с маршрутом добавить.

cavver
источник
1
Я изменил это на принятый ответ. Оно работает! Я делал это route -n flushнесколько раз, затем просто перезапускал сеть через Системные настройки. Мне потребовался всего год, чтобы вернуться и выяснить это :)
Нейт Мюррей
Это решило аналогичную проблему для меня с клиентом Sonicwall Aventail Connect VPN, который я нахожу особенно склонным к сбоям «Не удается назначить запрашиваемый адрес», особенно при переключении беспроводных сетей. Теперь у меня есть способ решить, который не избегает цикла питания. Спасибо!
Алан Доннелли
Вау! Это также помогло с моей проблемой с BarracudaVPN… Я включил / выключил Wi-Fi и, наконец, смог снова подключиться! Большое спасибо!
hans_meine
19

Я столкнулся с этой проблемой при использовании домашнего сервера OpenVPN и подключении к нему с помощью приложения Tunnelblick на Mac.

То, что происходило на моем конце, было то, что маршрут с моим домашним IP в качестве пункта назначения и неправильного шлюза становился остатком после отключения от VPN. Удаление этого маршрута решило проблему, просто

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

Пример: я в школе и после новой загрузки компьютера подключаюсь к беспроводной сети. Я подключаюсь к своему домашнему серверу OpenVPN с Tunnelblick.

$ 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. Затем используйте маршрут commnand, чтобы встроить gw по умолчанию. Так что-то вроде:

ifconfig en0 down

ifconfig en0 up

route add <ip address> default

Джордан Юнсон
источник
1
Да, но как Mac OS X узнает IP-адрес маршрута по умолчанию? Что я действительно хотел бы увидеть, так это то, как Mac OS X выполняет процесс загрузки и делает то же самое.
Нейт Мюррей
1
...? Он получает это от DHCP ...
Джордан Юнсон
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

Это означает, что маршрут настроен как root, но когда соединение разорвано, пользователь больше не является root, поэтому маршрут не может быть удален.

Комментирование этих 2 строк в моем .ovpnфайле устранило проблему, без необходимости использовать post-disconnect.sh.

jklp
источник
Спасибо, это сработало и для меня. К сожалению, ссылка на код Google больше не работает.
Тоби
Я попытался использовать ваше предложение, проблема в том, что при подключении к VPN он извлекает файлы конфигурации откуда-то и перезаписывает мои изменения. Насколько я могу судить, он не получает их с сервера, потому что когда я меняю эти файлы, это не решает проблему. Есть ли место на стороне клиента, где я могу найти эти файлы и уничтожить / изменить их, чтобы мои изменения остались неизменными?
Finncent Price
Я делал тривиальную ошибку, путая ~ / Library с / Library. К сожалению! Для любого, кто читает это, вы можете изменить файл в ~ / Library / Application Support / Tunnelblick / Configurations / <vpnname> .tblk / Contents / Resources
Finncent Price