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

Как работает iptables, если для DNAT и REDIRECT установлено одно и то же правило?

$ iptables -t nat -L -n
Chain KUBE-PORTALS-CONTAINER (1 references)
target     prot opt source               destination         
…
REDIRECT   tcp  --  0.0.0.0/0    11.1.1.88      /* service-nginx */ tcp dpt:8001 redir ports 43318
Chain KUBE-PORTALS-HOST (1 references)
target     prot opt source               destination         
…
DNAT   tcp  --  0.0.0.0/0    11.1.1.88    /* service-nginx */ tcp dpt:8001 to:10.10.103.58:43318

[обновление] Кстати, 10.10.103.58 - это просто IP-адрес eth0 локальной машины.

Я увидел ответ в Разница между DNAT и REDIRECT в IPTABLES, поэтому я знаю, что REDIRECT работает только для локального перенаправления.

[обновление] Но у меня вопрос: в этом случае Kubernetes устанавливает DNAT и REDIRECT на одном компьютере. Почему?

[обновление] Судя по названию сети, DNAT перенаправит любой запрос, отправленный с хоста, на 11.1.1.88 к 10.10.103.58:43318. Но для отправки запроса из контейнера, запущенного на этом хосте, REDIRECT вместо этого будет работать цепочка.

Я прав?

Нет необходимости устанавливать оба правила. Одного их хватит на такой же тип трафика.

  1. Если вы хотите перенаправить трафик на локальный компьютер (брандмауэр), вы можете использовать любой из них. С помощью DNAT может быть полезно, если вы хотите указать другой IP-адрес на локальном компьютере, отличный от того, который получил REDIRECT если у вашего компьютера несколько IP-адресов.
  2. Если вы хотите перенаправить трафик на другую машину, вам нужно использовать DNAT чтобы указать новый пункт назначения.

Коротко, DNAT является более общим и может использоваться во всех случаях.