我有一台安装了 DD-WRT 的路由器。刚刚在上面配置了 Open VPN。效果很好。
我现在想这样做,如果 VPN 隧道发生故障,所有流量都会被阻止,除了 VPN 连接本身之外,其他任何流量都不应直接流向 ISP。也就是说,路由器只应允许通过 VPN 进行通信。
在阅读几篇博客后,我发现了这行代码:
iptables -I FORWARD -i br0 -o eth1 -j DROP
我已将其添加到启动和防火墙中。但似乎不起作用。我已禁用 VPN,但仍在写这个问题。
这就是我现在拥有的。用过几次 Reebot 后,它完全没有反应。
如果重要的话,它是运行固件的华硕 RT-N16 路由器:DD-WRT v24-sp2 (12/20/11) mega
编辑:我使用以下防火墙命令使其工作:
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/如何使用-DD-WRT-连接到-a-VPN-并阻止所有非VPN流量
答案1
您是否将 OpenVPN 作为 wrt 上的端点?FORWARD 规则不会影响源自华硕本身的流量,只会影响在华硕需要路由的不同接口上/通过该接口发送的流量。这张 Netfilter 图表可能会有帮助
示例(在您的 Linux 工作站上):添加一个从您的 WAN 接口发出的端口 80 的记录器(可能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
检查你的向前链:
# 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.