Я соединяю две сети (клиенты A и B) вместе с помощью OpenVPN. Допустим, клиент A находится за NAT с IP-адресами 192.168.20.x, а клиент B находится за NAT с IP-адресами 172.16.1.x. Есть ли способ настроить мою настройку так, чтобы клиенты могли общаться с машинами внутри подсетей друг друга через сервер OpenVPN (10.8.0.1, 255.255.255.0)?
Например, если внутренний IP-адрес клиента A - 192.168.20.50, а клиента B - 172.16.1.50, существует ли способ, которым клиент A может выполнить эхо-запрос или трассировку для клиента B, успешно используя его частный IP-адрес?
Да, это возможно.
Каждый конец туннеля должен иметь интерфейсы в частных сетях соответствующего конца. То есть например 10.8.0.1
должен иметь адрес в 192.168.20.0/24
сеть и 10.8.0.2
должен иметь адрес в 172.16.1.0/24
сеть (я предположил, что сетевые маски для сетей, например, ваша настройка может быть другой).
Затем вам нужно включить правильную маршрутизацию на устройствах.
Для клиентов в 192.168.20.0/24
сети, они должны иметь маршрут в своей таблице маршрутизации, который говорит им направлять пакеты в 172.16.1.0/24
через 192.168.20.x
, где x
октет, соответствующий другому интерфейсу 10.8.0.1
сервер.
Затем сервер в 10.8.0.1
должна иметь запись в таблице маршрутизации, которая сообщает, что пакеты 172.16.1.0/24
сеть должны быть отправлены через 10.8.0.2
, то есть другой конец туннеля.
Затем вам нужно иметь соответствующие правила для другого конца туннеля, меняя местами сетевые адреса.
Самый простой способ реализовать это - запустить сервер / клиент OpenVPN на маршрутизаторе этой сети. Тогда нет необходимости добавлять правила маршрутизации для каждого клиента, поскольку маршрутизация обрабатывается шлюзом по умолчанию. В этом случае нужно только правило маршрутизации на сервере / клиенте OpenVPN.
Если сервер / клиент OpenVPN - это другой компьютер, чем маршрутизатор по умолчанию, то необходимо распределить сетевые маршруты клиентам. Один из способов сделать это - через DHCP. Один метод описан в Как я могу настроить свой DHCP-сервер для распределения IP-маршрутов?.