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


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

я использую vpnc для VPN-клиента. Я также делаю некоторые сложные вещи с 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


56
2017-10-26 15:43


Источник




Ответы:


Вам нужно очистить маршруты. использование route -n flush несколько раз . Затем добавьте свои маршруты с добавлением маршрута.


50
2017-11-02 09:51



Я изменил это на принятый ответ. Оно работает! я сделал route -n flush несколько раз, то я просто перезапустил свою сеть с помощью настроек системы. Мне потребовался только год, чтобы вернуться и понять это :) - Nate Murray
Это решило для меня аналогичную проблему с клиентом Sonicwall Aventail Connect VPN, который, как я обнаружил, особенно подвержен ошибкам «Невозможно назначить запрошенный адрес», особенно при переключении беспроводных сетей. Теперь у меня есть способ решить, что не избегает силового цикла. Благодаря! - Alan Donnelly


Я столкнулся с этой проблемой при использовании домашнего сервера 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, anything) после этого. Если я просто удалю маршрут:

$ 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, который уходит от него (и мне было бы интересно узнать, что это такое), но я установил сценарий post-disconnect Tunnelblick, который автоматизирует удаление этого маршрута.


14
2018-04-17 17:46



У меня есть аналогичная проблема. Действительно раздражает. - Tom Busby
Я сталкиваюсь с той же проблемой, даже с примером сценария ovpn. Единственное решение, которое я нашел, такое же, как OP, при удалении маршрута в сценарии после отключения: / - jklp
Есть ли способ автоматически запускать этот скрипт при каждом отключении? - Whitecat
@Whitecat Да! Проверь это: superuser.com/a/1305361 - Elad Nava


Сначала вам нужен маршрут для вашего сетевого интерфейса. Если VPN отключен, просто снимите сетевой интерфейс и верните его с помощью ifconfig. Затем используйте команду commnand для построения в вашем gw по умолчанию. Итак, что-то вроде:

ifconfig en0 down

ifconfig en0 up

route add <ip address> default


9
2017-10-26 20:34



Да, но как Mac OS X знает, что такое IP-адрес маршрута по умолчанию? Мне бы очень хотелось увидеть, как Mac OS X выполняет процесс загрузки и делает то же самое. - Nate Murray
...? Он получает его от DHCP ... - Jordan Eunson


Я столкнулся с той же проблемой, что и @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]

Первоначально я помещал «route -n delete» в post-disconnect.sh скрипт, но это было немного грязно, поэтому вместо этого я нашел эту ссылку

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

По-видимому, причина связана с установкой следующего в моем .ovpn файл

user nobody
group nogroup

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

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


4
2017-10-05 23:29



Спасибо, это сработало и для меня. К сожалению, ссылка на код google больше не работает. - Toby