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