Stunnel + OpenVPN

Всех приветствую друзья!
Поделителесь пожалуста информацией по следующему вопросу:
Дано - впс-сервер с настроенным Stunnel и OpenVPNserver и клиент с настроенным Stunnel и OpenVPNserver. При подключении клиента через Stunnel и OpenVPN, клиент видит только других клиентов в сети, сервер и др ресурсы в сети OpenVPN, доступа в интернет нет… Пробовал настраивать таким же методом на различных ВПС разных повайдеров (vpsag, cloud.ru), результат один… Работать данная связка перестала где-то 2-3 месяца назад, не могу понять почему. Если кто знает подскажите плиз, почему такое происходит?
client_ovpn.conf (305 байтов)
client_stunnel.conf (159 байтов)
srv_stunnel.conf (173 байта)
svr_ovpn.conf (342 байта)

Таким — это каким?
Вероятно, у вас блокируются транзитные пакеты firewall’ом, либо маршрутизация не включена вовсе (net.ipv4.ip_forward).

Я имею ввиду конфиги настроены, таким же образом сейчас, до того, как обрубило все. На сервере net.ipv4.ip_forward=1, на клиенте net.ipv4.ip_forward=0. На клиенете поставил 1, но не завелось. По поводу firewall’а, он не включен:
на клиенте >>
cyber@yodo:~$ sudo ufw status
Status: inactive
на сервере >>
user1@vpn:/etc/openvpn/server$ sudo ufw status
Status: inactive

маршруты выглядят так:
клиент >>
cyber@yodo:~$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.8.0.1 128.0.0.0 UG 0 0 0 tun0
default router.lan 0.0.0.0 UG 100 0 0 ens18
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
ns1.onlime.ru router.lan 255.255.255.255 UGH 100 0 0 ens18
ns2.onlime.ru router.lan 255.255.255.255 UGH 100 0 0 ens18
localhost router.lan 255.255.255.255 UGH 0 0 0 ens18
128.0.0.0 10.8.0.1 128.0.0.0 UG 0 0 0 tun0
192.168.88.0 0.0.0.0 255.255.255.0 U 100 0 0 ens18
router.lan 0.0.0.0 255.255.255.255 UH 100 0 0 ens18

server >>
user1@vpn:/etc/openvpn/server$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 100 0 0 enp3s0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 enp3s0
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
169.254.169.254 10.0.0.2 255.255.255.255 UGH 100 0 0 enp3s0

Помимо настройки самого тунеля необходимо настроить машрутизацию между сетями, например, с помощью firewalld добавив policy с настроенными ingress-zone и egress-zone.

это разве обязательно? 2 мес назад работало все с дефолтными правилами.

Не знаю, я не пользуюсь квик инсталлами, компилирую и копирую вручную и всегда прописываю машрутизацию вручную. Мне нравится для этого использовать firewalld — высокоуровневая надстройка над nftables.

Ну а туннель-то сам стабильно работает? Когда вы пингуете клиентов внутри сети, вы можете делать это продожительное время без проблем?
Если так, то ищите проблему на стороне сервера: либо в правилах маршрутизации, либо в файрволле.
Отлаживайте добавлением правил файрволла и просмотром счётчиков на них, а также с помощью tcpdump.
Также проверьте DNS — убедитесь, что ваш 10.9.0.1 действительно отвечает на запросы.

внутренняя сеть работает хорошо (сужу по работе 1с), проблем нет. Провайдеры пишут, что у них все ок, они ничего не меняли))
Знакомый сказал, что РКН блочит, но как? если блочил бы, то вся сеть неверное бы падала.
Может кто платно помочь разобраться\донастроить?

Бесплатный пример конфига на всякий случай (iptables ufw должны быть удалены чтобы не мешались):

Создаём зону внешнего интерфейса с интернетом:
	sudo firewall-cmd --permanent --new-zone="mine_external"
Добавляем интерфейс к зоне:
	sudo firewall-cmd --permanent --zone="mine_external" --add-interface=ens33
Создаём зону виртуального интерфейса тунеля:
	sudo firewall-cmd --permanent --new-zone="mine_ikev2"
Добавляем интерфейс к зоне:
	sudo firewall-cmd --permanent --zone="mine_ikev2" --add-interface=tun
Настройка SNAT для внешней зоны
	sudo firewall-cmd --permanent --zone="mine_external" --add-masquerade
Настройка транзитного трафика между зонами
	sudo firewall-cmd --permanent --new-policy="_ikev2_to_exernal"
	sudo firewall-cmd --permanent --policy="_ikev2_to_exernal" --set-target ACCEPT
	sudo firewall-cmd --permanent --policy="_ikev2_to_exernal" --add-ingress-zone="mine_ikev2"
	sudo firewall-cmd --permanent --policy="_ikev2_to_exernal" --add-egress-zone="mine_external"

Ну там ещё можно настроить открытие порта тунеля:

	sudo firewall-cmd --permanent --new-service=mine_tunnel
	sudo firewall-cmd --permanent --service=mine_tunnel --set-description=Mine Tunnel service
	sudo firewall-cmd --permanent --service=mine_tunnel --add-port=1234/tcp
	sudo firewall-cmd --permanent --zone="mine_external" --add-service="mine_tunnel"

если по умолчанию стоит отброс пакетов:

	sudo firewall-cmd --permanent --zone="mine_external" --set-target=DROP

Спасибо, не знаю на сколько он актуален в моем случае)) Но в любом случае пригодится.

Я погуглил сейчас и вижу, что в моем случае для предоставления доступа к интернету компам из сети необходимо, чтобы net.ipv4.ip_forwarding=“1” было, но оно и так было, в остальных случаях, все пакеты, которые залетают на сервер и не подпадают под правила, по умолчанию в такое случае ACCEPT правило применяется. По этому с правилами все ок. (если в чем-то ошибаюсь поправьте плиз).
По поводу DNS, стоит 10.9.0.1, ранее при таком подходе не работал инет, менял на 8.8.8.8 все заводилось, не знаю почему так…

Наверно потому что надо указывать 10.8.0.1 в качестве днс, у вас же OpenVPN эту сеть выдает. Откуда у вас взялся 10.9.0.1?
Если пинговать IP, например 8.8.8.8, тоже интернета нет?

Покажите ещё вывод sysctl -p

не обязательно 10.8.0.1, я настраивал на 10.9.0.1 (не суть в данном случае).
если 8.8.8.8 указать в конфиге клента (dhcp-option DNS 8.8.8.8) - инета все равно нет…
на серваке выполня. sysctl -p, в ответ ничего не выдает… Но если:
user1@vpn:/etc/openvpn/server$ cat /proc/sys/net/ipv4/ip_forward
1
З.Ы. Настраиваю на Ubuntu 20.04, где-то читал, что 20 ubuntu не работает должным образом… Завтра попробую в качестве сервака 22 накатить попробовать.

Раскоментировал параметр на сервере
user1@vpn:/etc/openvpn/server$ sudo nano /etc/sysctl.conf
user1@vpn:/etc/openvpn/server$ sysctl -p
sysctl: permission denied on key “net.ipv4.ip_forward”, ignoring
user1@vpn:/etc/openvpn/server$ sudo sysctl -p
net.ipv4.ip_forward = 1

На клиенте рестартанул openvpn-client, поигрался с DNS адресом в конфиге ovpn, интеренета нет)

Если у вас в /etc/sysctl.conf параметр записан так: net.ipv4.ip_forward=1, то попробуйте прописать так net.ipv4.ip_forward = 1, затем выполнить sudo sysctl -p
У меня недавно на свежеустановленном дебиане похожая проблема была, мне добавление пробелов помогло, хотя и так и так должно работать, возможно в моем случае был касяк с каким-то скрытым символом, т.к. я копипастил эту строку с какого-то форума.

Да, бывает такое. Но проблема не решилась)

Дело точно не в блокировке РКН, если была бы блокировка, то у вас бы вообще связности с локалкой (сервером) не было.

Я кстати что-то упустил, у вас OpenVPN выдает адреса 10.8.x.x, а на сервере или где-то дальше для 10.8.0.0/24 NAT наружу настроен? Иначе как вы клиентов вообще в интернет выпускать собираетесь?

Здравствуйте! NAT не трогал… Все по дефолту… Если подскажите, что сделать, буду признателен, т.к. в этой области пробел, который устранить еще не успел…

Простого ответа нет, все очень сильно зависит от того, какая у вас сеть, что у вас на сервере, и т.д.

Если просто VPS на котором крутятся какие-то сервисы, то смотрите обычную инструкцию по настройке MASQUERADE, их обычно упоминают в инструкциях по настройке VPN. С iptables это будет что-то типа How to configure iptables for openvpn (arashmilani.com)

Возможно вы уже даже это делали когда настраивали, все работало, а потом сервер перезагрузился, и правил снова нет :slight_smile: