Я возился с веб-серверами в Rackspace, пытаясь выяснить, могу ли я создать веб-сайт с общедоступными частями, а также частными частями, которые видны только через VPN-соединение.
У меня есть 2 сервера, на которых запущен apache, у первого есть смесь публичных и частных сайтов. У второго есть частные сайты, а также pptpd, работающий как VPN-сервер. В обоих случаях внутренние IP-адреса (10.n.n.n) предоставляются через DNS для частных сайтов.
Вот наспех нарисованная диаграмма, которая, надеюсь, покажет, как мне удалось все настроить:
Публичные сайты работают нормально. VPN-соединение работает нормально. Частные сайты на сервере 2 работают нормально при подключении к VPN. Что не работает, так это доступ к частным сайтам на сервере 1 через VPN. Я добавил на диаграмму потенциально вводящую в заблуждение красную стрелку, показывающую, где, по моему мнению, проблема.
Я могу пинговать каждый сервер от другого по их внутренним адресам, и я могу пинговать сервер 2 через Интернет по его внутреннему адресу. Что я не могу сделать, так это проверить связь с сервером 1 через Интернет.
Я чувствую, что мне наивно не хватает некоторых важных сетевых знаний о том, как на самом деле работают VPN. Кто-нибудь может увидеть, что мне не хватает?
Внутренняя IP-информация для серверов:
Server 1
inet addr:10.177.129.10 Bcast:0.0.0.0 Mask:255.255.192.0
Server 2
inet addr:10.176.132.180 Bcast:0.0.0.0 Mask:255.255.192.0
Rckspace уверяет меня, что это означает, что они находятся в одной подсети
Изменение локального и удаленного IP-адресов в /etc/pptpd.conf
localip 10.176.132.180
remoteip 192.168.0.234-238,192.168.0.245
или
localip 192.168.1.1-99
remoteip 192.168.1.100-245
или
localip 192.168.1.1
remoteip 192.168.1.2-245
Включение bcrelay eth1
и proxyarp
в /etc/pptpd.conf
Не знаю, нужен ли мне бкрелей, но в то время это казалось хорошей идеей.
Добавление маршрута с
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.176.132.180
(или 192.168.0.0, независимо от того, какой локальный идентификатор) или
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
Добавление различных записей iptable, таких как:
sudo iptables -t nat -A POSTROUTING -j SNAT --to-source [server 2 ext ip]
или
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
или
sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
или
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
Добавить записи в таблицу ARP через скрипт
Следующий предложения найдены на этом сайте(Так как я вижу "Невозможно определить адрес Ethernet для ARP прокси" из pptp в системном журнале), я добавил ip-up.local
и ip-down.local
сценарии, которые запускаются всякий раз, когда клиент подключается и отключается, автоматически изменяя таблицу ARP, чтобы добавить это:
arp --use-device --set <client 192.168... ip address> eth0 pub
Кажется, ничего из этого не работает. Единственная разница в том, что иногда я получаю следующее:
Pinging 10.177.129.10 with 32 bytes of data:
Request timed out.
и иногда получаю такое:
Pinging 10.177.129.10 with 32 bytes of data:
Reply from <server 2 ext ip>: Destination host unreachable.
в зависимости от того, какие варианты я пробую.
Однако я с болью осознаю, что из всей моей работы с таблицами firewall / arp, я не совсем понимаю, что я делаю, и это меня беспокоит. Мне также известно о неприятном ощущении, что я, должно быть, все перепробовал или что есть какая-то волшебная комбинация вышеперечисленных вещей, которую я еще не пробовал.
Не зная больше о специфике вашей IP-адресации, я бы предположил, что сервер 1 не знает, что ваша рабочая станция должна быть маршрутизирована через сервер 2.
Если вы добавите более подробную информацию о своей схеме IP-адресации, особенно в отношении IP-адреса, с которого, по-видимому, исходят HTTP-запросы с вашей рабочей станции, я мог бы расширить этот ответ.
Обновить: Лучшее предположение сервера 1 о том, как добраться до 192.168.0.234, - это маршрут по умолчанию, что неверно. Вам нужно добавить статический маршрут к 192.168.0.0/24 через сервер 2 на сервере 1.
route add -net 192.168.0.0 netmask 255.255.255.0 gw <server2>
Я делаю предположения о сети, назначенной pptpd. Кроме того, этот маршрут не выдержит перезагрузки, поэтому вы, вероятно, захотите добавить маршрут в файл конфигурации. Какой файл и какой синтаксис зависит от вашего дистрибутива.