Приветствую,
я использую 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
Вам нужно промыть маршруты. Использовать маршрут -n flush несколько раз . После этого добавьте свои маршруты с помощью route add.
Я столкнулся с этой проблемой при использовании домашнего сервера 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, который автоматизирует удаление этого маршрута.
Сначала вам нужен маршрут для вашего сетевого интерфейса. Если VPN отключен, просто отключите сетевой интерфейс, а затем снова включите его с помощью ifconfig. Затем используйте команду route, чтобы создать gw по умолчанию. Так что-то вроде:
ifconfig en0 down
ifconfig en0 up
route add <ip address> default
Я столкнулся с той же проблемой, что и @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
script, но это было немного беспорядочно, поэтому вместо этого я нашел эту ссылку
https://code.google.com/p/tunnelblick/issues/detail?id=177
По-видимому, причина в том, что в моем .ovpn
файл
user nobody
group nogroup
Это означает, что маршрут настроен как root, но когда соединение прерывается, пользователь больше не является root, поэтому маршрут не может быть удален.
Комментируя эти 2 строки в моем .ovpn
файл устранил проблему, без использования post-disconnect.sh
.