У меня следующая установка:
По умолчанию подключение к Интернету осуществляется через 10.56.9.15 (это быстрее), но у меня есть контроль только над 10.56.9.1, поэтому для некоторых конкретных хостов это должен быть маршрут. Чтобы достичь этого в общем случае, я настроил 10.56.9.5 как маршрутизатор, установив 10.56.9.15 в качестве GW по умолчанию и добавив определенные маршруты для хостов, к которым необходимо получить доступ через 10.56.9.1.
Теперь мне нужно открыть доступ из Интернета к хост-серверу VNC. У меня такая проблема.
Есть ли способ маршрутизировать пакеты через определенный шлюз без объявления IP-адреса источника и без какой-либо конкретной настройки на конечных хостах (только на маршрутизаторах и шлюзах)?
Да, вы можете, в зависимости от способности вашего шлюза разрешить конфигурацию.
Вы настраиваете правило NAT на шлюзе, чтобы преобразовывать исходный адрес трафика VNC в IP-адрес локального шлюза на входе (или, точнее, в Linux, на выходе из вашего внутреннего интерфейса).
Хорошо использовать псевдоним IP-адреса (или их пул) в интерфейсе gw, чтобы вы могли идентифицировать и отделить искаженный трафик от обычного. Отложите адрес или подсеть, которые находятся в локальном адресном пространстве, но рассматриваются как внешний адрес с точки зрения доверия, скажем 10.56.9.254
Также полезно вести журнал перед NAT, чтобы вы могли определить, откуда на самом деле пришел трафик, поскольку ваш VNC-ящик теперь будет видеть локальный внутренний адрес для всех подключений.
Когда трафик попадает в VNC, он видит адрес локального источника, который всегда будет маршрутизироваться туда, где вы его назначили (естественный трафик, откуда исходил трафик), тогда трафик вернется обратно тем же путем, которым он пришел, и будет деформирован. выход.
В мире Linux правило адресов и nat будет выглядеть так:
ip address add 10.56.9.254 dev intnic0
iptables -t nat -A POSTROUTING -o intnic0 -p tcp --destination 10.56.9.vnc --dport 5900 -j SNAT --to 10.56.9.254
Вы можете сделать то же самое на другом GW с другим IP, скажем 253, а затем вы можете подключиться через любой из них.
Если вы пошагово выполняете процесс подключения, это, по сути, то, что делает ваш NAT на выходе из вашей внутренней сети. Изменение исходного IP-адреса, отправка пакетов и их обратное отображение, когда пакеты возвращаются. Вы просто хотите сделать это для определенного соединения и в противоположном направлении, в котором вступает в действие конфигурация шлюза. Позволяет ли вам настроить то, на что он способен?
edit: вы можете реализовать те же правила NAT в GW 10.56.9.5 по умолчанию, если вы маршрутизируете трафик VNC через 10.56.9.5 и можете идентифицировать Интернет, из которого пришли данные. Возможно, пометив пакеты на пути через шлюзы или в gw по умолчанию, где вы все еще можете определить, откуда пришли пакеты.