Как сделать на основе nat по номеру порта в nat без сохранения состояния?

for   f in ./*_*_*_*_*_?*.txt
do    [ -e "$f" ] &&
      printf %s.txt\\n "${f%"${f#*_*_*_*_*_?}"}"
done
2
08.03.2018, 19:57
3 ответа

Путем изменения полей заголовка пакета с помощью nftables это возможно даже без использования ip route add nat, который, как простая функциональность маршрутизатора, ограничен уровнем 3 (IP ), а не уровень 4 (TCP, UDP,... ).

ВНИМАНИЕ :здесь требуется nftables >= 0,6 (>= 0,7, если используется notrack )и ядро ​​>= 4,10. Протестировано здесь с nftables 0.8.3 и ядром 4.15.x.

Это довольно компактно, потому что nftables может объединять несколько целей (Здесь 3 цели):

# nft add table raw
# nft 'add chain raw prerouting {type filter hook prerouting priority -300;}'
# nft add rule raw prerouting ip daddr 205.254.211.17 udp dport 5004 notrack ip daddr set 192.168.100.17 udp dport set 5006

Кавычки во 2-й строке, чтобы избежать интерпретации оболочки. Если делать тесты, самый быстрый способ удалить все nft —nft flush ruleset.

Таким образом, просто прочитав его вслух, правило предлагает выбрать только IP-пакет с пунктом назначения 205.254.211.17, который является UDP с портом назначения 5004, а затем помечает его как неотслеживаемый(с помощью conntrack, если он загружен ), устанавливает IP-адрес назначения на 192.168.100.17 и устанавливает порт назначения на 5006.

Вы можете смешивать nftablesс iptablesправилами без особых проблем, если вы не используете natтаблицы на обоих одновременно (хорошо, вы все равно не хотите использовать это ). Возможность указать явный приоритет цепочки позволяет даже выбрать, будут ли хуки nftables запускаться до или после соответствующих хуков iptables, например, здесь, выбрав -301 или -299, чтобы быть уверенным, что они будут запускаться до или после таблицы iptables raw, если была такая необходимость.

1
27.01.2020, 22:18

Судя по всему, Linux не поддерживает преобразование NAT без сохранения состояния, позволяющее ограничить поведение определенным портом или набором портов.

Из документации iproute2:

Stateless NAT, occasionally maligned as dumb NAT, is the simplest form of NAT. It involves rewriting addresses passing through a routing device: inbound packets will undergo destination address rewriting and outbound packets will undergo source address rewriting.

Похоже, что этот тип NAT ограничен только IP-адресами. Глядя на текущую основную реализацию ядра здесь , кажется, что функции, ответственные за выполнение работы, не принимают номера портов, только IP-адреса и сетевые маски.

0
27.01.2020, 22:18

Вам необходимо отредактировать пакеты с помощью tc pedit munge. Соответствуйте входящему порту, перепишите назначение пакета как адрес локальной сети и выполните обратное для исходящего пакета.https://www.man7.org/linux/man-pages/man8/tc-pedit.8.html

Преимущество tc в том, что он быстрый, очень быстрый. Плохая сторона — кривая обучения.

0
05.02.2021, 14:34

Теги

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