Выходной трафик в различных интерфейсах на основе целевого порта

В контексте именованных каналов (fifos) использование дополнительного дескриптора файла может позволить не блокировать поведение передачи по каналу.

(
rm -f fifo
mkfifo fifo
exec 3fifo  # open fifo for writing
trap "exit" 1 2 3 15
while true;
do
    echo "blah" > fifo
done
)
#kill -TERM $bpid

См.: Именованный канал, закрывающийся преждевременно в сценарии?

23
13.04.2017, 15:36
4 ответа

Вы близки.

Истинная причина, что приложение не видит обратного трафика, из-за ядра, создал в защите IP-спуфинга. Т.е. обратный трафик не соответствует таблице маршрутизации и поэтому отбрасывается. Можно зафиксировать это путем выключения спуфинга защиты как это:

sudo sysctl net.ipv4.conf.wlan0.rp_filter=0

Но я не рекомендовал бы это. Более надлежащий путь состоит в том, чтобы создать альтернативный экземпляр маршрутизации.

  1. Метка необходима. Сохраните его.
  2. Источник NAT также необходим.
  3. Заключительный DNAT является ненужным, таким образом, можно удалить его.

Удостоверьтесь, что Вы имеете iproute пакет установлен. Если Вы имеете ip управляйте затем, что Вы установлены (который похоже, что Вы делаете, но если не получают это сначала).

Править /etc/iproute2/rt_tables и добавьте новую таблицу путем добавления следующей строки:

200 wlan-route

Затем необходимо настроить новую названную таблицу маршрутизации wlan-route со шлюзом по умолчанию и создают правила условно отправить трафик в ту таблицу. Я предположу, что Ваш шлюз по умолчанию 192.168.0.1. Естественно это должно соответствовать Вашей фактической сети и не только моим предположениям.

ip route add default via 192.168.0.1 dev wlan0 table wlan-route
ip rule add fwmark 0x1 table wlan-route

Аннотируемый сценарий Вашего финала будет похож на это:

# Populate secondary routing table
ip route add default via 192.168.0.1 dev wlan0 table wlan-route
# Anything with this fwmark will use the secondary routing table
ip rule add fwmark 0x1 table wlan-route
# Mark these packets so that iproute can route it through wlan-route
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o wlan0 -p tcp --dport 443 -j SNAT --to 192.168.0.2
24
27.01.2020, 19:42
  • 1
    Спасибо за то, что заняли время для изучения этого. Однако это уже, что я использовал, (как описано в другом вопросе), таким образом, у меня есть дополнительный настроенный маршрут, но это - все еще то же. SYN-ACKs возвращаются к 192.168.0.2, но по-видимому никогда не достигают приложения. –  rumpel 20.09.2011, 21:06
  • 2
    Возвратитесь и прочитайте мой ответ снова. Я обратился к этому. –  bahamat 20.09.2011, 22:14
  • 3
    Часть о защите спуфинга? Никакое изменение даже после попытки. Извините, считайте его back&forth пару раз, но еще не получите то, что я пропускаю. –  rumpel 20.09.2011, 22:23
  • 4
    Необходимо добавить a src опция к ip route команды для определения корректного исходного адреса. –  David Schwartz 23.09.2011, 13:51
  • 5
    @DavidSchwartz: POSTROUTING SNAT будет заботиться об этом. –  bahamat 24.09.2011, 00:06

решение bahamat правильно; однако, обратите внимание на то, что единственный путь ко мне для создания этой работы состоял в том, чтобы отключить rp_filter для каждого интерфейса в системе, не только два (eth1 и wlan0 в этом случае) вовлеченный в NATing.

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $f; done
echo 1 > /proc/sys/net/ipv4/route/flush

(см. ВАЖНОЕ примечание в конце этой страницы: практическое руководство Расширенной маршрутизации - ссылка, отправленная там, больше не существует, но я нашел его через Wayback Machine),

8
27.01.2020, 19:42
  • 1
    Спасибо за это отвечает, я также мог только получить bahamats работу решения, рассмотрев Ваш ответ. –  Dynalon 13.05.2014, 11:05
  • 2
    для меня на довольно стандартном поле ubuntu 12.04 LTS, дополнительно к отключению rp_filter и сбрасывание кэша маршрутов я также должен был разделить имя интерфейса от iptables аргументов. не имел достаточного количества времени для исследования почему. –  Costin Gușă 23.06.2014, 18:28

Одно предложение: вы всегда должны использовать --спорт вместо -порта в выходной цепи.

NATs изменяют dport и это сделает ваше правило невыполнимым.

.
0
27.01.2020, 19:42

Я думаю, что ниже необходимо:

ip ru add from 192.168.0.2 table 3 prio 300
ip ro add table 3 default via 192.168.0.1 dev wlan0
0
20.08.2021, 13:33

Теги

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