Сеть новичков. У меня есть два интерфейса на хосте: eth0 и tun0 от моего клиента OpenVPN. IP-адреса:

eth0    192.168.1.22
tun0    10.1.0.8

Вопрос 1

Для исходящего трафика, изменив адрес получателя на tun0 , заставит ли он использовать vpn?

Нет, но использование адреса шлюза для tun0 делает. Протестировано со следующим:

    iptables -t nat -N VPN
    iptables -t nat -I OUTPUT -j VPN
    iptables -t nat -A VPN -p tcp -j DNAT --to-destination 10.1.0.170

Где 10.1.0.170 был адрес шлюза для VPN (найден с использованием ip route).

  1. В приведенном выше примере создается цепочка NEW (-N) для таблицы nat (-t).
  2. Переход к цепочке VPN происходит с OUT (сразу после локального приложения). Использование вставки (-I) для замены других правил в OUT.
  3. Подразумевается, что для трафика, исходящего из любого источника, измените назначение на шлюз устройства tun0 .

Вопрос 2(а)

Для исходящего трафика адрес назначения является IP-адресом интерфейса eth0 или это адрес шлюза? Предполагая, что eth0 является интерфейсом / шлюзом по умолчанию.

Вопрос 2(б)

Для трафика, генерируемого из локального приложения, каков адрес источника?

Вопрос 3

Это можно решить исключительно с помощью iptables или мне нужно изменить таблицу маршрутизации? Поскольку оба интерфейса находятся на одном хосте (то есть в одном и том же окне Debian).

Дополнительная информация

Я пытаюсь понять принципы, чтобы применить их в своем деле. Всего существует три подсети I-адреса, третья находится в диапазоне 172.17.42.1/16, связанная с другим виртуальным интерфейсом docker0 .

По сути , я хочу , чтобы направлять трафик от всего 172.17.42.8 через VPN.

2 ответа2

0

Из того, что я могу сказать, вы говорите о разделенном туннелировании (или, скорее, пытаетесь отключить его).

Посмотрите на директиву redirect-gateway в OpenVPN: https://openvpn.net/index.php/open-source/documentation/howto.html#redirect

0

Прежде всего, отличная фигура, связанная со страницей iptables Archiinux wiki, полезна для определения потока пакетов через различные цепочки iptables (внизу ответа).

Резервное копирование

iptables-save > back.up.file

Проверьте ваш вкус дистрибутива Linux, мне нужно было добавить sudo как я не был root.

Вопрос 2(а), 2(б)

Для определения адресов источника и назначения я нашел функции LOG и TRACE очень полезными:

iptables -t filter -I OUTPUT -m limit --limit 5/m --limit-burst 10 -j LOG  --log-prefix "ABC-LOG-PREFIX "

Таблица по умолчанию - filter но я указал это явно, чтобы вы могли видеть синтаксис, особенно если вы хотите изучить другие таблицы:mangle , nat и т.д. Я вставил правило -I потому что я хотел, чтобы пакеты регистрировались до применения других правил. Добавлен лимит скорости, чтобы файл журнала не становился насыщенным -m limit --limit 5/m --limit-burst 10 . Наконец, добавлен префикс, чтобы можно было легко найти файл журнала --log-prefix . Например, в Linux Mint:

cat /var/log/kern.log | grep "ABC-LOG-PREFIX"

Во-вторых, для отладки команда TRACE будет отслеживать пакет в течение всего процесса:

IPTABLES -t raw -A PREROUTING -p tcp -j TRACE

Предупреждение, это отследит все tcp пакеты, для получения дополнительной информации см. Admin Berlin

Вопрос 3

Поскольку оба интерфейса (eth0 и tun0) были на одном хосте, из приведенной ниже схемы фильтра пакетов видно, что исходящий трафик начинается в одной точке. Какой маршрут выбирает пакет, определяется шлюзом по умолчанию и связанным с ним интерфейсом, который можно определить с помощью iproute2 , выполнив:

ip route

Это покажет шлюз по умолчанию, какие интерфейсы используются для каких диапазонов адресов.

Блок-схема

схема потока пакетов iptables

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .