У меня роутер с установленным DD-WRT. Только что настроил Open VPN на него. Работает отлично.

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

Читая в нескольких блогах, я пришел к этой строке кода:

iptables -I FORWARD -i br0 -o eth1 -j DROP 

Который я добавил как для запуска, так и для брандмауэра. Но это не похоже на работу. Я отключил VPN и все еще пишу этот вопрос.

Это то, что у меня сейчас есть. Который после нескольких реботов абсолютно ничего не делает.

Если это имеет значение, то это маршрутизатор Asus RT-N16 с установленной прошивкой: DD-WRT v24-sp2 (20.12.11) мега

Текущий мост (больше, если это поможет информация).

РЕДАКТИРОВАТЬ: я получил это для работы с помощью следующих команд брандмауэра:

iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
iptables -I FORWARD -i br0 -o vlan2 -j DROP
iptables -I INPUT -i tun0 -j REJECT
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Написал статью, подробно описывающую, как использовать ее в DD-WRT с OpenVPN для блокировки всего трафика, отличного от VPN, здесь: http://syntaxwarriors.com/p/1019/How-to-use-DD-WRT-to-connect-to- а-VPN-и-блок-все-не-VPN-трафик

1 ответ1

1

У вас есть OpenVPN в качестве конечной точки на WRT? Правило FORWARD не повлияет на трафик, исходящий от самого Asus, а только на трафик, который отправляется через / через другой интерфейс, для которого Asus должен маршрутизировать. Эта диаграмма Netfilter может быть полезна

Пример (на вашей рабочей станции Linux): добавьте регистратор для порта 80, выходящий из вашего интерфейса WAN (может быть, у вас eth0 , я запускаю мост br0 для виртуализации):

# iptables -I FORWARD -o br0 -p tcp --dport 80 -j LOG --log-prefix="FWD: "

Теперь подключитесь к серверу, который использует порт 80

# wget -q www.google.com -O /tmp/out.htm

Проверьте свою цепочку FORWARD :

# iptables -nvL FORWARD
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 LOG        tcp  --  *      br0     0.0.0.0/0            0.0.0.0/0            tcp dpt:80 LOG flags 0 level 4 prefix "FWD: "

Ничего .. dmesg тоже тихо

# dmesg | grep FWD:

Ничего не показывает .. так что теперь попробуйте вместо этого цепочку OUTPUT:

# iptables -I OUTPUT -o br0 -p tcp --dport 80 -j LOG --log-prefix="OUT: "

После того, как вы повторите wget, вы должны увидеть это:

    # dmesg | grep OUT
...
    [427898.519765] OUT: IN= OUT=br0 SRC=192.168.1.6 DST=72.21.91.29 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=62284 DF PROTO=TCP SPT=58982 DPT=80 WINDOW=242 RES=0x00 ACK URGP=0 

Отбрасывание выходного TCP теперь все становится простым правилом, которое может выглядеть следующим образом. Вы также можете -p tcp чтобы заблокировать любой IP-трафик, это всего лишь пример:

# iptables -I OUTPUT -o br0 -p tcp -j REJECT --reject-with icmp-host-prohibited

# wget www.google.com -O /tmp/foo
converted 'http://www.google.com' (ANSI_X3.4-1968) -> 'http://www.google.com' (UTF-8)
--2017-02-14 12:38:00--  http://www.google.com/
Resolving www.google.com (www.google.com)... 216.58.192.132, 2607:f8b0:4009:80c::2004
Connecting to www.google.com (www.google.com)|216.58.192.132|:80... failed: No route to host.
Connecting to www.google.com (www.google.com)|2607:f8b0:4009:80c::2004|:80... failed: Address family not supported by protocol.

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