Маршрутизировать трафик от VPN-сервера VPN (одноранговый) к VPN-клиенту
Я настроил развертывание Google Cloud примерно так:
- узел B, который находится по адресу 10.0.0.6 и маршрут по умолчанию через 10.0.0.1
- узел 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
работал, и мне не нужно было устанавливать специальные правила маршрутизации ни для одного экземпляра.