Только позвольте определенный исходящий трафик в определенных интерфейсах

Кажется, что Вы могли использовать комбинацию ответов здесь. Я предполагаю, что Вы желаете заменить символы пространства их завершенными значениями ASCII в URL. Чтобы сделать это, необходимо заменить их "%20", не просто "%". Вот решение, которое должно дать Вам полный ответ:

$ wget `echo http://maps.google.be/maps\?saddr\=$1\&daddr\=$2 | sed -e 's/\ /\%20/g'` -q -O temp.html

Обратные галочки указывают, что вложенная команда должна быть интерпретирована сначала, и результат, отправленный в wget. Заметьте, что я вышел из пространства и символов % в команде sed, чтобы препятствовать тому, чтобы они были неправильно истолкованы.-q опция для wget предотвращает вывод обработки от команды, распечатанной на экран (удобный для сценариев, когда Вы не заботитесь о вставлять состоянии), и-O опция указывает выходной файл. К вашему сведению, если Вы не хотите сохранять вывод в файл, но просто просматривать его в терминале, используйте "-" вместо имени файла для указания на stdout.

15
27.04.2011, 13:22
3 ответа

Я установил бы таблицу отдельной маршрутизации, и политика направить отмеченные пакеты с помощью той таблицы и иметь iptables/netfilter отмечают определенные пакеты.

Составьте таблицу: echo 1 known >> /etc/iproute2/rt_tables

Создайте правило маршрутизации ( ip команда от iproute2): ip rule add from all fwmark 1 table known

Мы составили таблицу, названную "известной", и создали правило маршрутизации, которое говорит, что любой пакет с меткой, равной 1, направляется согласно "известной" таблице. Я только назвал известным, потому что это для списка известных протоколов - можно назвать его вообще, Вы хотите. Теперь мы устанавливаем известную таблицу для маршрутизации надлежащего пути.

ip route add default dev eth0 table known

Создайте правила iptables:

iptables -t mangle -I PREROUTING -p tcp --dport 111 -j MARK --set-mark 1
iptables -t mangle -I PREROUTING -p tcp --dport 2049 -j MARK --set-mark 1

Пример отмечает пакеты на портах NFS (111, 2049) с 1. Мы добавляем это правило к iptable 'искажению'. Это отличается от таблиц маршрутизации и не изменяемо; таблица искажения специально для изменяющихся пакетов всегда кроме NAT.

Теперь, для маршрутизации всего остального через другой интерфейс мы добавляем маршрут к стандартной таблице маршрутизации.

ip route add default dev eth1

Для реального понимания этого считайте разделы 4 и 11 из практического руководства LARTC.

12
27.01.2020, 19:49
  • 1
    Хорошо это на самом деле намного более просто, чем я боялся. Сетевой стек Linux действительно является красивым зверем, не так ли?! Я дал этому быстрый тест, и все это, кажется, работает как ожидалось. Я контролирую каждый интерфейс через iftop и они каждый показывают правильный вид трафика. Огромное спасибо. –  Oli 28.04.2011, 03:31
  • 2
    , который я не знаю, как iptables или iproute2 хранят их конфигурацию. Я должен исчерпать эти правила каждая начальная загрузка? –  Oli 28.04.2011, 03:52
  • 3
    @Oli Они действительно становятся убранными, когда Вы перезагружаете. Можно сохранить и восстановить правила с iptables-save и iptables-restore. При использовании NetworkManager можно установить сценарии диспетчера для автоматизации процесса. К сожалению, официальная страница NM не имеет документации о функции, но Ubuntu и Дуги документация Linux оба упоминания это. –  Shawn J. Goff 29.04.2011, 15:55

Ну, "самый легкий" путь должен состоять в том, чтобы дать единственным программам команду использовать определенный интерфейс (или IP интерфейса. Например:

ping -I eth1 8.8.8.8

дает ping команду использовать eth1 в качестве исходного интерфейса, в то время как

wget --bind-address 10.0.0.1 http://www.google.it/

дает wget команду идти через интерфейс, который имеет 10.0.0.1 как IP-адрес.

Честно я не знаю, возможно ли это со всеми программами, Вам нужно, но это - запуск для обрезки вниз правил, для которых необходимо записать iptables и iproute программы.

Как запуск необходимо прочитать это учебное руководство на нескольких интернет-соединениях. Хорошее чтение является также одной из тысяч iptables учебных руководств, expecially на outbound filtering, process/pid filtering и port filtering.

5
27.01.2020, 19:49

Надлежащий путь к к этому состоит в том, чтобы связать () с интерфейсом, который Вы хотите использовать для исходящих пакетов. Так как можно затем настроить маршруты с ip route и ip rule команды, чтобы управлять, как пакеты направляются на основе их исходящего интерфейса. Для моего примера я приму следующую сеть:

  • eth0:
    • Адрес: 192.168.0.2/24
    • Шлюз по умолчанию: 192.168.0.1
  • eth1:
    • Адрес: 192.168.1.2/24
    • Шлюз по умолчанию: 192.168.1.1

Я создам две таблицы маршрутизации, один для трафика, исходящего для eth0, названного альтернативой и одной таблицей для eth1, названного основным. Таблица маршрутизации, основная всегда, существует и является нормальной таблицей, которая используется route и ip route команды. Большинство людей никогда не имеет дело ни с какими другими таблицами. Для составления таблицы, названной альтернативой, мы добавим следующую строку к /etc/iproute2/rt_tables:

10    alternate

Основная таблица имеет приоритет по умолчанию 254. Правилами, для которых таблица маршрутизации в действительности, управляют ip rule команда. По умолчанию та команда распечатает список существующих правил, которые должны выглядеть примерно так:

0:      from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default 

Это в основном говорит, что будет искать маршрут в таблице local который является специальной таблицей, сохраняемой ядром для локальных маршрутов, таких как мой собственный IP-адрес. Это затем попробует основную таблицу и значение по умолчанию таблицы. Значение по умолчанию таблицы обычно является пробелом поэтому, если там не идет ни в какое сравнение в основном, нет никакого маршрута для хостинга. Во-первых, позволяет таблице заливки чередоваться с правилами для eth0.

sudo ip route add table alternate 192.168.0.0/24 dev eth0
sudo ip route add table alternate 192.168.1.0/24 dev eth1
sudo ip route add table alternate default via 192.168.0.1

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

sudo ip rule add from 192.168.0.0/24 pref 10 table alternate

В этом правиле говорится, что любой трафик, прибывающий из адреса в 192.168.0 сетях, будет использовать alternate таблица маршрутизации вместо нормального main таблица. Последний шаг должен удостовериться все клиенты, которые должны использовать eth0 свяжите с ним. С wget, например, набор --bind-address=192.168.0.2, для набора NFS clientaddr=192.168.0.2 смонтируйте опцию. При использовании LibWWW с Perl можно установить localaddr опцию в LWP:: UserAgent для управления локальным интерфейсом это связывает с. Если у Вас, оказывается, есть клиент, Вы не можете управлять привязкой, и компиляция источника не является опцией, Вы смогли использовать правило iptables изменить, это - адрес, но это - больше взлома и не может работать. Вам было бы нужно правило SNAT, настроенное в цепочке PREROUTING или туземной таблицы или таблицы искажения. Вам все еще будут нужны измененные таблицы маршрутизации, данные выше, чтобы это работало.

4
27.01.2020, 19:49

Теги

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