Первый вариант - понастраивать прокси, реверс-прокси и т.п. Я его активно эксплуатировал, но чем дальше в лес - тем толще партизаны. Постепенно порты становились всё более заковыристыми, а сетевые сервисы головного офиса - всё более вычурными. Тут и цитрикс, и веб, и какие-то 1С с тонким клиентом, и РДП, и почта, и черт знает, что будет ещё. После того, как я с ужасом понаблюдал бухгалтера, пытающегося через два терминальных сервера поработать с 1С, пришло желание что-то в этой схеме упростить.
Второй вариант - поднять сервер PPTP на компьютере, который видит как "интернет", так и сеть Амстердама. (На самом деле всё устроено немного сложнее, тут главное, что этот компьютер хоть и обладает одним сетевым интерфейсом, eth0, зато его прекрасно видно из Ванкувера, а он, в свою очередь, имеет возможность достучаться до всех, кого нужно)
Итак, на этом волшебном компьютере под управлением Slackware:
1. Разворачиваем poptop, оказавшийся тем самым pptpd, установить который предлагал каждый второй мануал командой apt-get install pptpd. Ну, у нас тут не дебиан, так что скомпилируем из исходников.
2. Настраиваем pptpd: из каталога samples исходников копируем файл pptpd.conf в /etc и прописываем в нем две опции (настройки виртуальной сети - свой адрес в ней и диапазон адресов клиентов):
localip 192.168.0.1 remoteip 192.168.0.200-234
3. Настраиваем pptpd: из каталога samples исходников копируем файл options.pptpd в каталог /etc/ppp/, комментируем в нем опцию proxyarp (не знаю, правда, зачем, это была безуспешная попытка избавиться от сообщения Cannot determine ethernet address for proxy ARP) и прописываем в нем две опции (адреса dns и wins-серверов амстердамской сети):
ms-dns A1.A1.A1.A1 ms-wins A2.A2.A2.A2
4. Настраиваем pptpd: из каталога samples исходников копируем файл chap-secrets в каталог /etc/ppp/ и указываем там учетку, которой разрешено входить в виртуальную сеть (заодно можно указать адрес, который будет ей выделяться), формат каждой записи примерно такой:
логин[табуляция]*[табуляция]пароль[табуляция]*
6. Настраиваем сервер: разрешаем форвардинг ip-пакетов на уровне ядра. Это делается так. В файл /etc/sysctl.conf прописываем строку:
net.ipv4.ip_forward=1затем эту опцию подсовываем в ядро командой:
sysctl -p
7. Настраиваем iptables
# Пропускать все пакеты с интерфейсов ppp*, например ppp0 /usr/sbin/iptables -t filter -A INPUT -i ppp+ -j ACCEPT /usr/sbin/iptables -t filter -A OUTPUT -o ppp+ -j ACCEPT # Пропускать входящие соединения на порт 1723 (PPTP) /usr/sbin/iptables -t filter -A INPUT -p tcp --dport 1723 -j ACCEPT # Пропускать все пакеты GRE /usr/sbin/iptables -t filter -A INPUT -p 47 -j ACCEPT /usr/sbin/iptables -t filter -A OUTPUT -p 47 -j ACCEPT # Включить форвардинг IP /usr/sbin/iptables -t filter -F FORWARD /usr/sbin/iptables -t filter -A FORWARD -j ACCEPT # Включить NAT для интерфейсов eth0 и ppp* /usr/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE /usr/sbin/iptables -t nat -A POSTROUTING -o ppp+ -j MASQUERADE
Осталось настроить vpn-клиентов. В моём случае это машины с WinXP на борту, так что там всё просто: из-под учетки с административными правами в Панели управления в задаче "Сетевые подключения" вызвать мастер установки нового подключения и с его помощью всё установить. Правда, маршрутизация там оказалась хитрая: клиент лезет в vpn только если не может найти нужный ресурс в локальной сети, но, в крайнем случае можно указать статический маршрут:
route add A.0.0.0 mask 255.0.0.0 192.168.0.200Впрочем, судя по разговорам умных людей, эта проблема имеет более изящное решение.
Да, и ещё одно. Надо отметить, что в самом начале пути меня постигло некоторое разочарование. Не все vpn-серверы оказались одинаково полезны. В частности, к установленному с опрометчивой самонадеянностью tinc-у штатные клиенты WinXP цепляться не будут. Дело, как я понял, в том, что tinc и pptp - разные протоколы, и майкрософт поддерживает "из коробки" как раз pptp.
Литература:
PPTP server (Русский)
Настраиваем VPN сервер. Часть 3 - PPTP. Платформа Linux.
UPD 2015-08-03: Если вдруг зачем-то понадобилось сменить порт tcp1723, на котором работает pptp, то можно поступить так:
a) на сервере (под линуксом) мапим порт:
iptables -t nat -A PREROUTING -p tcp --dport 11723 -j REDIRECT --to-ports 1723б) на клиенте (под виндой) открываем regedit и ищем параметр TcpPortNumber. У меня он нашелся в ветке:
HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0005Меняем его значение с 1723 на 11723 и перезагружаем компьютер.