Доступ к определённым IP-адресам в обход основной таблицы маршрутизации. [РЕШЕНО]
Объясню на конкретном примере - локальная сеть на работе:
- диапазон IP-адресов машин - 172.17.x.y, где x невелико (<127)
- локальный DNS-сервер/шлюз - 172.17.0.2
Обычная настройка машины: 172.17.x.y netmask 255.255.0.0 broadcast 172.17.255.255
При таких настройках сеть работает хорошо, в сети видны все windows-машины, можно получить доступ к машинам по имени (не только адресу).
Когда захотелось настроить себе мобильный интернет, столкнулся с тем, что DNS-адреса мобильного интернет-провайдара - 172.17.128.1 и 172.17.128.2. То есть они лежат в том же диапазоне, что адреса в локальной сети. Поэтому соединение хотя и устанавливается, но естественно, внешние адреса не резолвятся, так как по сути не получается соединиться с DNS-серверами провайдера.
Частично проблема решилась переходом на следующие настройки: 172.17.x.y netmask 255.255.128.0 broadcast 172.17.255.255, так что IP DNS-серверов мобильного оператора и локальных машин лежат в разных подсетях. Но при этом не удаётся получить список машин в сети, нельзя зайти на машину по имени (только по IP).
В общем, есть ли способ оставить старые настройки для нормальной работы, но при этом любой запрос на 172.17.128.1 и 172.17.128.2 пропускать не через eth0 интерфейс, а через ppp0 (или usb0)?
- Для комментирования войдите или зарегистрируйтесь
route add -host 172.17.128.1
route add -host 172.17.128.1 dev usb0
route add -host 172.17.128.2 dev usb0
Частично сработало
Вот что имеется на данный момент. Исходное состояние - мобильный телефон не подключен.
Локальная сеть работает нормально, интернета пока нет. Подключаю мобильный телефон к кабелю. Телефон определяется как usb0 сетевая карта (Sony Ericsson k800i), и получает настройки согласно /etc/conf.d/net по dhcp:
То есть провайдер выдал IP 172.20.20.87 через шлюз 172.20.20.85. При этом DNS адреса находятся в диапазоне локальной сети, поэтому делаю согласно подсказке выше (честно говоря, я раньше думал что это будет конфликтовать с уже имеющейся настройкой
172.17.0.0 mask 255.255.0.0 dev eth0
, но видимо роут на отдельный IP приоритетнее роута на подсеть, даже если этот IP входит в эту подсеть)При этом если не указывать gw, то ничего не работает (даже если не указывать в /etc/conf.d/net default для eth0).
Написал небольшой скрипт:
Вопрос: Как добавлять эти два маршрута автоматически (пробовал routes_usb0 в /etc/make.conf, но не работает, видимо эта опция не для dhcp), при этом надо учитывать что адрес шлюза при каждом новом подключении разный?
Если это нельзя, как можно вызывать вышеупомянутый скрипт автоматически при поднятии usb0?
> пробовал routes_usb0 в
> пробовал routes_usb0 в /etc/make.conf,
так его надо пихать в файл /etc/conf.d/net.usb0 в функцию
postup()
{
usbroute=$(route -n | grep ^0.0.0.0 | grep usb0 | xargs | cut -d ' ' -f2)
route add 172.17.128.2 gw ${usbroute} dev usb0
route add 172.17.128.2 gw ${usbroute} dev usb0
}
Спасибо, всё замечательно заработало
Естественно, я имел в виду не /etc/make.conf, а /etc/conf.d/net, просто опечатался.
Всё замечательно заработало, после приведения /etc/conf.d/net к следующему виду:
Про postup{} читал в /etc/conf.d/net.example, но подумал что это только для init-скриптов.
Всем спасибо за помощь.
>routes_usb0 в
>routes_usb0 в /etc/make.conf, но не работает
так и не должно ;)
пример /etc/conf.d/net:
routes_usb0="
112.0.0.0/8
64.63.100.0/24
1.0.0.0/8
"