Назад | Перейти на главную страницу

Как использовать другой IP-адрес для исходящего трафика?

Задний план

Я запускаю сервер с двумя внешними IPv4-адресами. IP-адрес A (IP-A) и IP-адрес B (IP-B).

Цель

Я хотел бы получить доступ к IP-A только через HTTPS-порт 443 и SSH-порт 22. IP-B не должен прослушивать входящий трафик.

Тогда я бы хотел, чтобы сервер использовал IP-B только для всего исходящего трафика. Или, по крайней мере, указать серверу использовать IP-B для исходящего трафика только для определенных команд.

Пример в псевдокоде:

1: I connect to the server over IP-A and call `ping example.com`
2: The server executes it and sends the ping requests outgoing from IP-B to example.com.
3: I can read the output of the command on my connection with IP-A

Зачем мне это нужно?

Потому что консоль управления, которую я буду использовать, находится на IP-A. Я хочу, чтобы IP-A не был напрямую связан с IP-B (по крайней мере, для внешнего мира). Вместо этого я хочу, чтобы example.com увидел «Я получил ping-запрос от IP-B». И когда кто-то подключается к IP-B, этот IP-адрес ничего не слушает. Пока IP-A в их логах нигде нет.

В конечном итоге я хотел бы добавить еще больше адресов и иметь возможность сообщать IP-A:

  1. Используйте IP-B для этой команды
  2. Используйте IP-C для этой команды
  3. Используйте IP-D для этой команды
  4. ...

Есть мысли о том, как настроить описанный выше сценарий? В настоящее время я использую Ubuntu, но я открыт для предложений по другим дистрибутивам Linux.

Большинство сетевых инструментов, таких как ping, будут иметь возможность выбрать исходный IP-адрес, который они будут использовать для исходящих соединений, поэтому, например, с помощью ping вы можете использовать ping -I IP-B.

Для все трафик, чтобы использовать IP-B, вам необходимо настроить первичный / первый IP-адрес для интерфейса, на который ваш маршрут по умолчанию указывает на IP-B. Что Linux делает, так это ищет маршрут для вашего пункта назначения, скажем, 8.8.8.8, видит, что в этом случае следует использовать маршрут по умолчанию, а затем, если источник пакета не указан, то есть 0.0.0.0, он заменит его на основной IP-адрес интерфейса, указывающего на это место назначения.

Однако, если вы в конечном итоге хотите добиться более точного управления исходным IP-адресом для любого трафика, исходящего на вашем сервере, вы захотите прочитать Расширенная маршрутизация и контроль трафика Linux HOWTO, а также поищите примеры того, как комбинировать это с netfilter / iptables fwmark, чтобы управлять таблицей маршрутизации, которую нужно искать, на основе правил брандмауэра, которые позволят вам направлять трафик категории B через маршрут по умолчанию, для которого IP-адрес B установлен как источник и так далее.

Ключевые слова для поиска - маршрутизация на основе политик (PBR).