Я настроил развертывание Google Cloud примерно так:
Отдельно у меня есть узлы 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, чтобы его пакеты, адресованные виртуальной подсети, маршрутизировались через сервер? Возможно, это не все, что необходимо, но это похоже на конкретный шаг, который я пока не могу решить.
Спасибо!
Я обнаружил проблему, и она зависит от платформы (GCP).
В Google Cloud есть специальный механизм для построения маршрутов, которые используют определенные IP-адреса или другие экземпляры в качестве маршрутизатора nexthop (некоторая документация там).
Мне пришлось использовать Terraform и настроить таким образом определенный маршрут, а также включить специальный рисунок CanIPForward
в обоих случаях. После этого iptables
работал, и мне не нужно было устанавливать специальные правила маршрутизации ни для одного из них.