@bouslayeff

Подключение к клиенту сети OpenVPN с любого компьютера, как это сделать?

Здравствуйте

Подскажите, пожалуйста, куда копать в такой вот ситуации.

Есть три компьютера, обозначаю их:

(1) клиентский (просто в интернете), не является клиентом OpenVPN

(2) сервер OpenVPN (шлюз между интернетом и OpenVPN типа tun)
Адреса обозначу так:
внешний IP сервера: a.b.c.d
OpenVPN IP сервера: 172.28.2.1

(3) клиент OpenVPN (внутри сети OpenVPN), с сервисом SSH на 22 порту, его адрес OpenVPN: 172.28.2.254

Хотелось бы, чтобы с клиентского компьютера (1), просто подключившись на внешний интернет-адрес и порт 63254 сервера (2), т.е. a.b.c.d:63254 получить подключение к SSH на компьютере (3).

На данный момент:

Вариант 1
Соединение (1) с (3) возможно только в том случае, если
компьютер (1) тоже сделать клиентом OpenVPN и подключаться с него через OpenVPN по адресу OpenVPN-сервера, то есть 172.28.2.1:22. Но таких клиентских компьютеров типа (1) может быть очень много, поэтому не хотелось бы на всех них ставить OpenVPN.
Естественно, в этом случае работает также прямое соединение с компьютера (1) на компьютер (3), то есть 172.28.2.254:22

Вариант 2
Если я указываю основным шлюзом на компьютере (3) сервер OpenVPN, то есть 172.28.2.1, то соединение a.b.c.d:63254 с компьютера (1) работает, но при этом весь интернет-трафик с компьютера (3) идет через OpenVPN, а это не нужно!
Если шлюз на компьютере (3) оставить как есть (то есть интернет-трафик идет как обычно, то работает только Вариант 1).

iptables компьютера (2) в данном тесте:
==========================================
*filter
:INPUT ACCEPT [480:23477]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1527:542132]
-A FORWARD -p tcp -d 172.28.2.254 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 63254 -j DNAT --to-destination 172.28.2.254:22
-A POSTROUTING -s 172.28.2.0/24 -o eth0 -j MASQUERADE
COMMIT
==========================================

iptables компьютера (3) в данном тесте:
==========================================
*filter
:INPUT ACCEPT [480:23477]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1527:542132]
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
==========================================

Вывод route -d на компьютере (3) в данном тесте, в случае Варианта 1, то есть без изменения шлюза по умолчанию:
==========================================
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 br0
172.28.2.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
==========================================
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
@bouslayeff Автор вопроса
Andrey Barbolin верно ответил в комментариях.
С помощью POSTROUTING -o tun0 на (2) и (3) все заработало!

Я сделал доступ на другие порты компьютера (3). Все ОК. Теперь iptables на компьютере (2) в моем примере в начале топика выглядят так:
==========================================
*filter
:INPUT ACCEPT [480:23477]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1527:542132]
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 63254 -j DNAT --to-destination 172.28.2.254:22
-A POSTROUTING -d 172.28.2.254 -p tcp -m tcp --dport 22 -o tun0 -j MASQUERADE
COMMIT
===============================

Более того, компьютер (3) - это не только клиент OpenVPN, он еще и шлюз из VPN в локалку. Часть перенаправлений портов с компьютера (2) на (3) требует перенаправлений с (3) на компьютеры локалки. Все сделал так же, работает.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы