iptables - метка набора - Маршрут различные порты через различные интерфейсы

Поскольку Вы сказали это, расширения файла Unix являются просто информацией. Вам просто нужен Ваш сценарий, чтобы иметь корректную хижину и быть исполняемым файлом.

У Вас не может или быть расширения или использования .sh.

Я personnaly использую следующие конвенции, независимо от используемой оболочки (csh, tcsh, удар, sh...):

  • никакое расширение для системы или (чрезвычайно редких) сценариев высокого качества.
  • .sh для классических сценариев, низко к высокой отметке.
13
09.03.2019, 15:03
2 ответа

BatchyX уже дают некоторое очень хорошее объяснение о iptables и маршрутизацию, таким образом, я осуществлю свою лень и перейду непосредственно к сценарию.

Это должно NAT весь трафик для портирования 80,443,22,4070 до 192.168.0.91. Все остальные будут NAT до 192.168.1.254.

Я восстанавливаю свое тестирование и заканчиваю после этого руководства. То, что отсутствует в том руководстве, является последними 3 строками в моем сценарии. Который я нашел из другого порта, но я потерял след той ссылки.

Это - протестированный рабочий сценарий.

Нужен маршрут по умолчанию

Одна вещь я не вставил сценарий, настраивает маршрут по умолчанию. Это должно быть

route add default gw 192.168.1.254

Когда Вы делаете route -n, это должен быть единственный маршрут по умолчанию (Dest:0.0.0.0)

0.0.0.0    192.168.1.254    0.0.0.0    UG    0    0    0    eth1

fw-router.sh

# Reset/Flush iptables
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

#Reset/Flush/Setup IP Route (table 4)
ip route flush table 4
ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table 4 $ROUTE ; done
ip route add table 4 default via 192.168.0.1

#Mark Packet with matching D.Port
iptables -t mangle -A PREROUTING -p tcp --dport 22   -s 10.0.0.0/24 -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -p tcp --dport 80   -s 10.0.0.0/24 -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -p tcp --dport 443  -s 10.0.0.0/24 -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -p tcp --dport 4070 -s 10.0.0.0/24 -j MARK --set-mark 4

#SNAT Rules
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.1.74
iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 192.168.0.91

#IP Route
ip rule add fwmark 4 table 4
ip route flush cache

#IP Stack
#This is the missing part from the guide
echo 1 > /proc/sys/net/ipv4/ip_forward
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 0 > $f ; done
echo 0 > /proc/sys/net/ipv4/route/flush

PS1: Короче говоря, MASQUERADE не работает (в большей части случая, и определенно в Вашем случае) для NAT с несколькими внешний дюйм/с, которые нуждаются в некотором выравнивании нагрузки или нуждаются в DNAT для обработки входящего трафика. Вам нужно SNAT для управления направлением.

PS2: Чистый iptables не достаточен.

4
27.01.2020, 19:53
  • 1
    В первую очередь, аплодисменты для движения непосредственно к сценарию :) Я попробую это сегодня вечером, когда я возвращаюсь к среде, в которой это будет работать в! перевозка –  Torxed 20.12.2012, 10:31
  • 2
    хм, возможно, нуждается тяжелый, пересматривают. Сообщите мне результат. –  John Siu 20.12.2012, 17:46
  • 3
    Пересмотренный, должен работать теперь. –  John Siu 20.12.2012, 21:20
  • 4
    Сладкий, возвратит Вам в коротком разрядном :D –  Torxed 21.12.2012, 13:24
  • 5
    , я люблю Вас, такую головную боль, и Вы решили его!Спасибо! –  Torxed 21.12.2012, 16:45

Примечание: Я только рассмотрел первый сценарий, игнорируя старый.

  • Вам не нужны к modprobe netfilter модули вручную с текущим iptables. Это только необходимо для пользовательских средств отслеживания соединения.
  • Не перепутывать route и ip route. Это - чистое зло. Просто используйте ip везде и забудьте о ifconfig и route
  • /etc/iproute2/rt_tables не сбрасывается через перезагрузки. Добавление той же записи много раз не является хорошей идеей, только необходимо сделать это однажды. Помните это rt_tables просто определите псевдонимы имени к числовым значениям, это не изменяет конфигурации.

  • Теперь для iptables: В Вашем FORWARD цепочка, Вы отбрасываете пакеты, прибывающие от LAN до 4G. Это плохо. FORWARD рычаг используется после того, как маршрутизация сделана. На данном этапе вся маршрутизация политики сделана, и уже известно, должен ли пакет быть отправлен в 4G или ADSL. Нет никакого перенаправления, в котором выполняют FORWARD или после FORWARD (хорошо, технически, перенаправление может быть сделано после POSTROUTING в серьезных случаях, но назад к точке).

Теперь для Вашей маршрутизации: Помните, что Ubuntu включает обратный путь, фильтрующий по умолчанию. Обратная фильтрация пути работает следующим образом: Когда ядро получает пакет (может оно быть переданным или не) от интерфейса A оно инвертирует исходный адрес и адрес назначения, и проверит, должен ли получающийся пакет быть направлен через интерфейс A. Если это не, пакет отбрасывается как попытка спуфинга адреса.

Для пакетов, полученных из eth0, это не проблема. Для пакетов, полученных из eth1, это - также не проблема, потому что при инвертировании исходного IP-адреса и целевого IP-адреса, ядро будет она маршрут по умолчанию в таблице main. Для пакетов, полученных из eth2, который Вы не отмечаете, это - проблема, потому что ядро поразит маршрут по умолчанию в таблице main, и полагайте, что эти пакеты должны были быть получены из eth1. Самое легкое решение состоит в том, чтобы отключить обратную фильтрацию пути на eth1:

sysctl -w net.ipv4.conf.eth1.rp_filter=0
5
27.01.2020, 19:53
  • 1
    Все замечательные комментарии и да, существует некоторая дефектная логика с моей стороны, например, добавляя к rt_tables каждый раз и особенно не очищая определенные таблицы, а также я должен, но я добраться там :) Я буду давать всему движение и видеть, работает ли оно, если так, +50 Вам, и самое главное Вы сохранили укомплектовывание позади от того, чтобы быть прерванным в биты и миры! :) –  Torxed 18.12.2012, 22:40
  • 2
    Ниже работ сценария, но Вас сэр заслуживает всей благодарности также, Вы дали мне, вещь или два для размышления об и rp_filter=0 помогла длинному пути! :D –  Torxed 21.12.2012, 16:47
  • 3
    @BatchyX, голосуйте Вам также. –  John Siu 22.12.2012, 05:18
  • 4
    @Torxed сообщение я видел упоминание rp_filter для ВСЕЙ интерфейсной потребности, которая будет отключена. Я не уверен, прокладывает ли это себе путь. –  John Siu 22.12.2012, 05:20
  • 5
    @JohnSiu: просто необходимо отключить фильтр RP в интерфейсах, где это проблематично. В этом случае это - eth1, потому что нет никакого маршрута, идущего в тот интерфейс, когда метки не установлены. eth2 не имеет такой проблемы, поскольку маршрут по умолчанию входит в тот интерфейс. Для eth0 на самом деле полезно сохранить фильтр RP включенным, иначе, кто-то на LAN мог подделать пакет IP с исходным адресом, находящимся в Интернете и адрес назначения на LAN, и маршрутизатор счастливо примет его и передаст его назад... eth0. положительная сторона –  BatchyX 22.12.2012, 11:24

Теги

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