Рабочая станция VPN-шлюза недоступна

Рабочая станция VPN-шлюза недоступна

Я хотел бы использовать свою рабочую станцию ​​Linux в качестве VPN-шлюза для моей локальной сети. Эта же рабочая станция используется как веб-сервер. Когда я подключаю рабочую станцию ​​к VPN, больше невозможно получить доступ к этому веб-серверу из внешней сети.

Моя настройка следующая:

Маршрутизатор ISP - ip 192.168.0.1 (шлюз по умолчанию, включено сопоставление портов для использования нестандартного публичного порта)

Рабочая станция Linux - фиксированный IP 192.168.0.20 (сервер DHCP, так как мой роутер не позволяет менять адрес шлюза, OpenVPN, Apache, DNS-сервер)

вывод "ip route show"

0.0.0.0/1 via 10.8.3.1 dev tun0 
default via 192.168.0.1 dev eth0 src 192.168.0.20 metric 202 
10.8.3.0/24 dev tun0 proto kernel scope link src 10.8.3.12 
37.120.143.221 via 192.168.0.1 dev eth0 (VPN external IP)
128.0.0.0/1 via 10.8.3.1 dev tun0 
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.20 metric 202 

Конфигурация следующая:

net.ipv4.ip_forward = 1
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p icmp -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o tun0 -j ACCEPT
-A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

Я заметил, что когда VPN включен на рабочей станции, маршрутизатор моего интернет-провайдера не отображает правильный локальный IP-адрес для моей рабочей станции Linux в списке подключенных клиентов. Иногда он правильный, но иногда он выглядит как случайный IP.

Если я добавлю следующий маршрут: EXTERNAL_IP через 192.168.0.1 dev eth0 (где EXTERNAL_IP — это WAN ip), то я смогу подключиться к веб-серверу в локальной сети, но по-прежнему не смогу из другой сети.

решение1

В вашей настройке все в порядке, ошибка кроется в маршрутизации.

Если ваш сервер работаетобакак веб-серверикак VPN-клиент для удаленного сервера, любой пользователь, пытающийся получить доступ к веб-серверу, получит ответ от удаленного VPN-сервера (нетнепосредственно с веб-сервера), поскольку таблица маршрутизации вашего локального сервера предписывает ему маршрутизироватьвсечерез удаленный сервер OpenVPN. Любая машина, отправляющая запрос на сайт A, но получающая ответ от B, автоматически отклоняет ответ по очевидным причинам безопасности. Следовательно, веб-сервер становится недоступным.

Есть много-много способов решить вашу проблему. Мой любимый — оставить веб-сервер нетронутым и переместить клиент OpenVPN в контейнер Linux, размещенный на том же сервере, а затем изменить конфигурацию маршрутизатора на ваш сервер DHCP/dnsmasq (что угодно), чтобы направить все коммуникации локальной сети через контейнер Linux. Это гораздо проще, чем кажется.

Другая возможность — это настроитьдватаблицы маршрутизации, оставив основную для клиентов OpenVPN, а вторую настроив какидентичныйв таблицу маршрутизации, которая у вас есть, когда VPN включеннетактивным, а затем указав ядру направлять весь трафик, исходящий от сервера (самого себя!) через эту вторую таблицу маршрутизации. Оставшийся трафик (тот, который исходит из вашей локальной сети и который вы хотите направить через OpenVPN) по умолчанию будет использовать основную таблицу маршрутизации.

Это тоже довольно легко сделать, вы можете найтиздесьпревосходное, очень краткое введение в Linuxполитика(илиисточник) маршрутизация.

Или вы можете решить разместить свой веб-сервер на той же машине, на которой размещен ваш сервер OpenVPN, что также решит вашу проблему. В этом случае самым простым будетзеркаловаш локальный веб-сайт на удаленном сервере, чтобы вы могли вносить любые изменения локально.

Выбор действительно за вами.

Связанный контент