Назад | Перейти на главную страницу

Клиент OpenVPN как шлюз для других клиентов

У меня есть сеть OpenVPN с одним сервером и двумя клиентами. Когда я настраиваю свой маршрут по умолчанию на C1 для прохождения через S (в котором включены IP-переадресация и NAT), все работает, как ожидалось. Проблема в том, что если я укажу маршрут по умолчанию C1 на C2 (который также правильно настроен для трафика NAT из VPN в Интернет), трафик в любом случае перехватывается S и перенаправляется им. Когда я tcpdump на C2, нет никаких признаков того, что туда что-то прибывает. Можно ли настроить клиента в качестве шлюза для других клиентов в OpenVPN или это свойство системы, что пакеты маршрутизируются событием сервера, если маршрут на клиенте указывается на другого клиента?

Редактировать:

Квадратные скобки обозначают мою виртуальную сеть (физически не существует). C1 / C2 / S могут без проблем пинговать друг друга в сети. Я хочу направить трафик с C1 через C2 в Интернет. Я могу маршрутизировать из C1 (и, вероятно, из C2) через S в Интернет, но маршрутизация через C2 не работает, поскольку вместо этого пакеты пересылаются S. Похоже, это проблема с сервером OpenVPN, который не хочет отправлять пакеты туда, куда они должны идти.

                [C1-S(NAT)] -- The Internet
The Internet -- [(NAT)C2/ ]

Я сталкивался с этой проблемой раньше, у меня работал клиент vpn, что мешало мне подключиться к другому устройству в моей домашней сети. Мне пришлось настроить статический маршрут ко второй машине, поскольку vpn-клиент автоматически добавит маршрут по умолчанию и будет перенаправлять весь трафик на сервер.

Если вы можете, чтобы трафик от C1 к C2 проходил через сервер, вам необходимо включить директиву client-to-client в server.conf, чтобы клиенты могли связываться друг с другом через VPN. По умолчанию клиенты смогут подключиться только к серверу.

Проверьте http://openvpn.net/index.php/open-source/documentation/howto.html в разделе «Включение нескольких машин на стороне клиента при использовании маршрутизируемой VPN (dev tun)».

Полностью ответить на этот вопрос сложно, не зная топологию сети, которую вы пытаетесь описать. Хотя я думаю, что могу сказать, что в целом можно делать то, о чем вы просите.

Рассмотрим сценарий ниже:

C1 -- R1 --(NAT)-- Internet --(NAT)-- R2 -- C2

Здесь, если существует (правильно настроенный) туннель OpenVPN, созданный между R1 и R2, то C1 может общаться с C2 и наоборот.

Этот сценарий сложнее исправить:

C2 -- R1 --(NAT)-- Internet --(NAT)-- R2 -- C3
C1 /                                      \ C4

Где C2 и C3 - конечные точки OpenVPN, а C1 должен использовать VPN для доступа к C4. Первое препятствие - установить туннель OpenVPN между C2 и C3, вероятно, используя переадресацию портов от R1 и R2 UDP 1190 к C2 и C3 соответственно.

Следующее - заставить C1 использовать C2 как способ передачи пакетов на C4. Это включает настройку таблицы маршрутизации на C1 и C4. C1 устанавливает маршрут к сети C4, идущей через C2, а C4 устанавливает маршрут к сети C1, идущей через C3. Оба этих маршрута должны иметь приоритет над маршрутом по умолчанию. Так что, возможно, на C1: {route add 192.168.3.0 gw 192.168.2.2} и на C4: {route add 192.168.1.0 gw 192.168.3.2}. Предполагается, что адреса C2 и C3 - 192.168.2.2 и 192.168.3.2 соответственно, и что C1 и C4 находятся в той же сети, что и C2 и C3 соответственно.

Надеюсь, этого достаточно, чтобы ответить на ваш вопрос и продемонстрировать, что настроить VPN на шлюзе по умолчанию намного проще, чем настроить VPN на клиенте, но есть варианты использования для обоих.

Изменить: с этой топологией и описанием проблемы, я считаю, что есть проблемы с маршрутизацией на C1 и C2 ... Маршрут по умолчанию C1 должен указывать на VPN-адрес C2 в качестве маршрутизатора. Это заставит C1 использовать VPN для передачи пакетов на C2, а затем C2 решит, что с ними делать.

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

Если вместо этого у C2 действительно нет своего собственного пути к Интернету, а вместо этого он проходит через S, тогда S должен быть маршрутизатором C2 по умолчанию.