Назад | Перейти на главную страницу

iptables - принудительно использовать весь трафик через VPN (и отбрасывать весь трафик при отсутствии VPN-соединения)

Цель: убедиться, что весь трафик принудительно проходит через VPN-туннель со всех сетевых интерфейсов (wlan0, rmnet0, rmnet1), то есть весь трафик упал когда не подключен к VPN. Другими словами, Интернет-трафик не должен быть разрешен, и допустим только трафик через VPN.

Пока ... Android-устройство с двоичным iptables, подключением к wlan и 3G шлюзом VPN @ 10.10.10.10 (не настоящий адрес).

iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i tun0 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -j DROP

iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o tun0 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -d 10.10.10.10 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -j DROP

Полученные результаты:

Кажется, что трафик заблокирован, но и подключение к VPN тоже.

Любые идеи? Обратите внимание, это только интерфейс rmnet0 для мобильных данных, и здесь еще нет Wi-Fi.

Я бы не стал использовать conntrack в этом сценарии, но гораздо более простой набор

iptables -A INPUT  -i tun0 -j ACCEPT
iptables -A INPUT  -s 10.10.10.10 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT
iptables -A OUTPUT -d 10.10.10.10 -j ACCEPT

Нет необходимости в отслеживании подключений. Вам также не нужен DROP правила в конце, кстати, -P ... DROP позаботится об этом.

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

iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT  -p udp --sport 53 -j ACCEPT