Перенаправить трафик с одного порта в одну цепочку с помощью iptable?

Вот немного улучшенный ответ в строке Хауке Лагинга:

#!/bin/bash

tmpfile=$(mktemp)  # Create a temporal file in the default temporal folder of the system

# Lets do some magic for the tmpfile to be removed when this script ends, even if it crashes
exec {FD_W}>"$tmpfile"  # Create file descriptor for writing, using first number available
exec {FD_R}<"$tmpfile"  # Create file descriptor for reading, using first number available
rm "$tmpfile"  # Delete the file, but file descriptors keep available for this script

# Now it is possible to work with the temporal file
echo foo >&$FD_W
echo bar >&$FD_W  # Note that file descriptor always concatenates, not overwrites

cat <&$FD_R
1
12.02.2019, 07:28
1 ответ

Я предполагаю, что REDSOCKS_FILTERнаходится в таблице filterиз iptables, а не в таблице nat? Вы не можете переходить от одной таблицы к другой, так как разные таблицы обрабатываются в разных местах в стеке драйвера TCP/IP.

Поскольку вы выполняете перенаправление в цепочках PREROUTING и OUTPUT в таблице NAT, эти изменения уже применяются, когда пакет обрабатывается соответствующими таблицами INPUT и OUTPUT filter. Так что вам нужно что-то вроде этого:

iptables -t filter -A INPUT -p tcp --dport 8118 -j REDSOCKS_FILTER
iptables -t filter -A OUTPUT -p tcp --dport 8118 -j REDSOCKS_FILTER

Поскольку filterявляется таблицей по умолчанию, вы можете опустить параметр -t filter.

Эта диаграмма потока пакетов между различными таблицами Netfilter может быть полезной:

https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg

Поскольку вы не используете мост, все, что вы делаете с iptables, происходит в зеленом «Сетевом слое» на этом изображении.

0
28.01.2020, 01:24

Теги

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