Суть вопроса:
Имеем настроенный на linux pptp сервер для подключения внешних клиентов к ресурсам внутренней сети. При установлении соединения с pptp сервером на машине windows клиента поднимается маршрут по умолчанию с более высоким приоритетом, чем маршрут через основное подключение. Вследствие чего перестает работать связь с Интернет, со всеми вытекающими последствиями. Если же в свойствах pptp соединения отключить галочку с пункта "Использовать основной шлюз в удаленной сети", то пропадает связь до ресурсов в удаленной сети. Возможности передать маршруты в рамках соединения клиент-сервер через pptpd нет.Решение:
Используем мапирование адресных пространств сетей. Будем транслировать то пространство, которое является локальным для интерфеса windows клиента после установки соединения.
Например, имеем адресное пространство удаленной(по отношению к клиенту) сети 192.168.0.0/24, а адрес интерфейса pptpd:
# grep localip /etc/pptpd.conf
localip 10.50.11.1
Настраиваем трансляцию адресного пространства:
# iptables -t nat -A PREROUTING -d 10.50.11.0/24 -j NETMAP --to 192.168.0.0/24 -m comment --comment "For_PPTPD_clients"
После чего с клиентской машины есть связь и с интернет, и с ресурсами удаленной сети через адреса 10.50.11.x. Неудобство с применением IP можно обойти через настройку dns с использованием отдельной зоны для клиентов pptpd сервера.
Необходимо отметить, что есть еще другой путь решения проблемы - через настройку отдельного dhcp на стороне сервера и использования option ms-classless-static-routes code, option rfc3442-classless-static-routes code. Встретил [[http://linuxforum.ru/viewtopic.php?id=847 здесь]]. Может быть он более правильный, но мне приведенное решение показалось более красивым и простым.
PS: Не забудьте разрешить соединения через цепочку FORWARD, если используется политика "Запрещено все, что не разрешено".
URL:
Обсуждается: http://www.opennet.ru/tips/info/2674.shtml