Маршрутизировать трафик от VPN-сервера VPN (одноранговый) к VPN-клиенту

Я настроил развертывание Google Cloud примерно так:

  1. узел B, который находится по адресу 10.0.0.6 и маршрут по умолчанию через 10.0.0.1
  2. узел V, который является сервером VPN, в той же подсети в 10.0.1.0

Отдельно у меня есть узлы Q и Q', которые находятся в моей домашней сети (за маршрутизатором) и подключаются к VPN как одноранговый узел. Q имеет статический IP-адрес 10.168.0.240, который назначается VPN как статический IP-адрес.

Q'не имеет значения, за исключением того, что Q и Q' могут успешно общаться при подключении к VPN.

Благодаря пересылке IP и iptables я смог настроить его таким образом, чтобы VPN позволяла трафику от клиентов использовать его в качестве шлюза к общему Интернету, и я подтвердил, что Q может обращаться к B напрямую таким образом (что достигнуто через OpenVPN push-routes Директива).

Проблема, с которой я сталкиваюсь, такова: я бы хотел, чтобы B мог напрямую обращаться к Q. Меня не особенно волнует, какой IP-адрес он использует для адресации, но я не могу использовать переадресацию портов через прослушиватель на машине VPN. Я надеюсь настроить таблицы маршрутизации и т. Д. На B так, чтобы он направлял пакеты к 10.168.0.240 через VPN-сервер, и чтобы сервер пересылал эти пакеты вниз tun0 интерфейс.

Я подозреваю, что последняя часть уже работает, но используя tcpdump Я могу подтвердить, что запрос на B, как traceroute 10.168.0.240 никогда не прибывает в V - если я не включаю директиву, как -g 10.0.1.0, Тем не менее, traceroute 10.0.1.0 действительно достигает V, и ping 10.0.1.0 работает так же.

B настроен так:

$ ip route list default via 10.0.0.1 dev eth0 10.0.0.1 dev eth0 scope link 10.168.0.0/24 via 10.0.1.0 dev eth0

Я подозреваю, что мои знания промежуточного уровня о маршрутизации не хватает одной важной части. Я подумал, что, возможно, настройки метрик / предпочтений, по которым я не могу найти много документации, решат эту проблему; однако все источники указывают на то, что предпочтительны более конкретные маршруты. Третий маршрут кажется наиболее конкретным и подходящим для этого маршрута.

Как настроить B, чтобы его пакеты, адресованные виртуальной подсети, направлялись через сервер? Возможно, это не все, что необходимо, но это кажется одним конкретным шагом, который я пока не могу решить.

Спасибо!

1 ответ

Я обнаружил проблему, и она зависит от платформы (GCP).

В Google Cloud существует специальный механизм для создания маршрутов, которые используют определенные IP-адреса или другие экземпляры в качестве маршрутизатора nexthop (некоторая документация там).

Мне пришлось использовать Terraform и настроить конкретный маршрут таким образом, и включить специальную фигуру CanIPForward в обоих случаях. После этого iptables работал, и мне не нужно было устанавливать специальные правила маршрутизации ни для одного экземпляра.

Другие вопросы по тегам