iptables MARK по месту назначения, изменить место назначения и источник по метке

Я пытаюсь использовать iptables, чтобы:

  1. Отметить пакеты, идущие на IP-адрес назначения
  2. Определить эту метку как изменить IP-адрес назначения
  3. Определить эту метку, чтобы изменить исходный IP-адрес

Вот команды, которые я пытаюсь использовать для этого:

sudo iptables -t mangle -A PREROUTING --destination 192.0.2.0 -j MARK --set-mark 11
sudo iptables -t nat -A PREROUTING -m mark --mark 11 -j DNAT --to-destination ${DESTINATION_IP}
sudo iptables -t nat -A POSTROUTING -m mark --mark 11 -j SNAT --to-source ${SOURCE_IP}

Похоже, первая команда MARK не собирает пакеты для маркировки их:

sudo iptables -vL -t mangle
Chain PREROUTING (policy ACCEPT 11892 packets, 1184K bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MARK       all  --  any    any     anywhere             192.0.2.0            MARK set 0xb

После этого более поздние правила не видят помеченных пакетов для изменения.

Прав ли я, думая, что pkts , являющееся 0 для этого правила, означает, что оно не соответствует ни одному пакету?

Как мне следует маркировать пакеты, чтобы впоследствии идентифицировать и изменять ?

0
задан 8 July 2019 в 22:45
1 ответ

Пакеты локального происхождения проходят не через цепочку PREROUTING , а через ВЫХОД . Итак, если вы попытаетесь протестировать свои правила с того же хоста, вам следует добавить правило MARK в цепочку mangle / OUTPUT и правило DNAT в ] nat / OUTPUT цепочка.

В результате ваши правила будут выглядеть так:

sudo iptables -t mangle -A OUTPUT --destination 192.0.2.0 -j MARK --set-mark 11
sudo iptables -t nat -A OUTPUT -m mark --mark 11 -j DNAT --to-destination ${DESTINATION_IP}
sudo iptables -t nat -A POSTROUTING -m mark --mark 11 -j SNAT --to-source ${SOURCE_IP}

Кроме того, есть способ избежать маркировки и ссылаться на исходные (до перевода) адреса и номера портов.

sudo iptables -t nat -A OUTPUT --dst 192.0.2.0 -j DNAT --to ${DESTINATION_IP}
sudo iptables -t nat -A POSTROUTING -m conntrack --ctstate DNAT --ctorigdst 192.0.2.0 -j SNAT --to ${SOURCE_IP}

Кому получить список опций соответствия iptables или цели iptables, вы можете воспользоваться краткой встроенной справкой. Например:

iptables -m connmark --help
iptables -j DNAT --help

При устранении неполадок в правилах nat вы должны знать, что только первый пакет нового подключения проходит таблицу nat .

Другими инструментами для устранения неполадок являются tcpdump и conntrack .

1
ответ дан 4 December 2019 в 15:40

Теги

Похожие вопросы