iptables направляет трафик через vpn

iptables направляет трафик через vpn

Сетевой новичок. У меня два интерфейса на хосте: 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. Приведенный выше пример создает -Nцепочку NEW ( ) для таблицы nat ( -t).
  2. Переход к цепочке VPN осуществляется из OUT(сразу после локального приложения). Использование вставки ( -I) для замены других правил в OUT.
  3. Подразумевается, что для трафика, исходящего из любого источника, необходимо изменить пункт назначения на шлюз tun0устройства.

Вопрос 2(а)

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

Вопрос 2(б)

Каков исходный адрес для трафика, генерируемого локальным приложением?

Вопрос 3

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

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

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

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

решение1

Прежде всего, превосходный рисунок, ссылка на который приведена на странице ArchLinux wiki iptables, полезен для идентификации потока пакетов через различные 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-пакеты, для получения дополнительной информации см.Админ Берлин

Вопрос 3

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

ip route

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

Диаграмма потока пакетов

диаграмма потока пакетов iptables

решение2

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

Взгляните на директиву redirect-gateway в OpenVPN:https://openvpn.net/index.php/open-source/documentation/howto.html#redirect

решение3

В следующих примерах имя устройства VPN — tun0 (OpenVPN), а имя шлюза VPN — 172.21.23.172.

#1 - Установите VPN на свой маршрутизатор Linux (я использую ipvanish с openvpn)

#2 - Маршрутизация трафика с использованием iptables

sudo iptables -t nat -A POSTROUTING -o [VPN dev] -j MASQUERADE

пример:

sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

#3 — Настройте таблицы маршрутизации (чтобы гарантировать, что весь трафик будет направляться через VPN)

sudo ip route add default via [VPN ipv4 address] dev [VPN dev]

пример:

sudo ip route add default via 172.21.23.172 dev tun0

#4 — Проверьте, что устройства в сети действительно маршрутизируются через VPN, выполнив следующие команды:

Windows: tracert 1.1.1.1Linux:traceroute 1.1.1.1

готово!

Связанный контент