![Клиент OpenVPN как шлюз для других клиентов](https://rvso.com/image/623645/%D0%9A%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%20OpenVPN%20%D0%BA%D0%B0%D0%BA%20%D1%88%D0%BB%D1%8E%D0%B7%20%D0%B4%D0%BB%D1%8F%20%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D1%85%20%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2.png)
У меня есть сеть 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)] -- Интернет Интернет -- [(NAT)C2/ ]
решение1
Ответить на этот вопрос полностью сложно, не зная топологию сети, которую вы пытаетесь описать. Хотя я думаю, что могу сказать, что в целом возможно сделать то, о чем вы спрашиваете.
Рассмотрим следующий сценарий:
C1 -- R1 --(NAT)-- Интернет --(NAT)-- R2 -- C2
Здесь, если между R1 и R2 создан (правильно настроенный) туннель OpenVPN, то C1 может взаимодействовать с C2 и наоборот.
Этот сценарий сложнее исправить:
C2 -- R1 --(NAT)-- Интернет --(NAT)-- R2 -- C3 С1 / \ С4
Где 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 на шлюзе по умолчанию, чем на клиенте, но существуют варианты использования обоих вариантов.
Редактировать: С этой топологией и описанием проблемы я считаю, что есть проблемы с маршрутизацией на C1 и C2... Маршрут по умолчанию C1 должен указывать на адрес VPN C2 как маршрутизатора. Это заставит C1 использовать VPN для передачи пакетов на C2, затем C2 решит, что с ними делать.
В случае, если C2 использует собственное подключение к Интернету, как вы показали, маршрут C2 по умолчанию должен вести к его собственному подключению к Интернету.
Если же у C2 на самом деле нет собственного пути к Интернету, а он проходит через S, то S должен быть маршрутизатором по умолчанию для C2.
решение2
Я сталкивался с этой проблемой раньше, у меня работал vpn-клиент, который не давал мне подключиться к другому устройству в моей домашней сети. Мне пришлось настроить статический маршрут ко второй машине, так как vpn-клиент автоматически добавит маршрут по умолчанию и будет пересылать весь трафик на сервер.
Если вас устраивает, что трафик от C1 до C2 идет через сервер, вам нужно включить директиву client-to-client в server.conf, чтобы клиенты могли добираться друг до друга через VPN. По умолчанию клиенты смогут добираться только до сервера.
Проверятьhttp://openvpn.net/index.php/open-source/documentation/howto.htmlв разделе «Включение нескольких машин на стороне клиента при использовании маршрутизируемого VPN (dev tun)».