Для работы DNAT (в том смысле, чтобы программа могла распознавать ответы), «обратный NAT», который меняет исходный порт отвечающего трафика с 192.168.30.1
(к 192.168.30.3:2001
) от 2003
к 2002
нужно будет выполнить.
Однако при наличии трафика, исходящего из 192.168.30.1:2003
к 192.168.30.3:2001
которые с точки зрения conntrack не являются следствием DNAT (поскольку согласно созданной записи conntrack хост не является тем, кто инициировал соединение), обратный NAT будет неуместным.
Таким образом, netfilter «вынужден» также выполнять SNAT для трафика, совпадающего с правилом DNAT, чтобы он мог различать отвечающие трафики (то есть также из 192.168.30.1:2003
) по месту назначения 192.168.30.3:$ случайный
.
Я предполагаю, что netfilter либо выполнит обратный NAT для DNAT (который является SNAT) перед обратным NAT для SNAT (который является DNAT), либо сумеет использовать место назначения перед обратным NAT для SNAT (т. 192.168.30.3:$ случайный
) как сопоставление для обратного NAT для DNAT, иначе принудительный SNAT будет бессмысленным.(Однако в случае без реверса ни одно из них не является истинным, AFAIK: DNAT будет выполняться в PREROUTING до SNAT в INPUT, а сопоставление пункта назначения в правиле SNAT, если таковое имеется, будет использовать значение, полученное в DNAT)
Дело в том, что история выше / «проблема» в вашем вопросе вряд ли имеет какой-либо смысл на самом деле. Возьмем в качестве примера VPN с двумя хостами Wireguard: предположим, вы хотите иметь Конечная точка =
установлен на обоих хостах (чтобы любой из них мог инициировать связь) и не хочет, чтобы значения неожиданно «обновлялись» из-за принудительного SNAT (при условии, что это действительно может быть запущено), что вы должны сделать, это просто «всегда -on" SNAT, который "дополняет" DNAT/ эквивалентен резервному NAT:
iptables -t nat -A INPUT -s 192.168.30.1 -d 192.168.30.3 -p udp --sport 2003 --dport 2001 -j SNAT --к источнику: 2002
что обычно не требуется в модели клиент-сервер из-за автоматического обратного NAT для DNAT.
P.S. Вы все еще не должны достичь 192.168.30.1:2003
к 192.168.30.1:2003
однако, в противном случае принудительный исходный NAT также произойдет, если вы снова достигнете его 192.168.30.1:2002
до того, как запись conntrack первого будет удалена. Дополнительное правило SNAT в INPUT также не должно доставить вам лишних хлопот.