1
pheyx 2014-07-12 12:58:33 +08:00 1
正好我跟你的做法类似,以下是我的脚本,有些地方如接口名称等等还需你改成和你的设置一样。
/etc/firewall.user: iptables -A PREROUTING -t mangle -m set ! --match-set whitelist dst -j MARK --set-mark 8 iptables -A OUTPUT -t mangle -m set ! --match-set $set dst -j MARK --set-mark 8 ip rule add fwmark 8 table vpn 这是/etc/hotplug.d/iface/30-routes:(系统在接口状态发生生变化时执行该脚本) #!/bin/sh if [ "$ACTION" = "ifdown" -a "$INTERFACE" = "vpn" ] then ip route replace default dev pppoe-wan fi if [ "$ACTION" = "ifup" -a "$INTERFACE" = "vpn" ] then ip route replace default dev pptp-vpn table vpn ip route replace default dev pppoe-wan fi |
2
pheyx 2014-07-12 13:13:53 +08:00
另外还需将你的lan网段加到whitelist里
|
3
tywtyw2002 2014-07-12 13:27:14 +08:00 via iPhone
ip rule里面有优先级吧,我偏向于用ip rule
|
4
neroanelli OP @pheyx
好的谢谢,我等一下测试一下。 我没有添加lan的网段在whitelist中,也没有iptables -A OUTPUT -t mangle -m set ! --match-set $set dst -j MARK --set-mark 8这句,不知道是不是问题的原因所在。 |
5
neroanelli OP @tywtyw2002
我的ip rule list当中,from all fwmark 0x8 lookup VPN_rt 这个是最高优先级。所以应该不是这个问题。 |
6
pheyx 2014-07-12 14:28:32 +08:00
@neroanelli
-A OUTPUT 那句是路由器本身翻墙用的,$set是我粘贴没改过来,应该是whitelist。 |
7
tywtyw2002 2014-07-12 14:30:55 +08:00 via iPhone
ip rule show 一下看看
|
8
neroanelli OP @tywtyw2002
0: from all lookup local 32758: from all fwmark 0x8 lookup GFWVPN_rt 32759: from xx.xx.xxx.xx lookup GFWVPN_rt 32760: from all fwmark 0x1e lookup wan2_rt 32761: from xx.xx.xx.xx lookup wan2_rt 32762: from all fwmark 0x14 lookup wan1_rt 32763: from xx.xx.xx.xx lookup wan1_rt 32764: from all fwmark 0xa lookup wan_rt 32765: from xx.xx.xx.xx lookup wan_rt 32766: from all lookup main 32767: from all lookup default |
9
neroanelli OP @pheyx
我刚刚测试了一下,不知道为什么我路由器本身可以直接翻,但是路由下的机器没办法翻。 在mangle表中,我的规则如下: iptables -t mangle -A PREROUTING -m set ! --match-set whitelist dst -j MARK --set-mark 8 iptables -t mangle -A OUTPUT -m set ! --match-set whitelist dst -j MARK --set-mark 8 同时我也将我的lan网段添加到了whitelist中。 感谢! |
10
jasontse 2014-07-12 18:45:18 +08:00 via iPad
@neroanelli 有做 NAT 吗
|
11
jasontse 2014-07-12 18:48:55 +08:00 via iPad
@neroanelli
iptables -t nat -A POSTROUTING -o pppX -j MASQUERADE |
12
neroanelli OP @jasontse
做了,以下是NAT表中的两条 -A delegate_postrouting -o pptp-GFWVPN -j zone_wan_postrouting -A zone_wan_postrouting -j MASQUERADE 现在就是找不到原因啊,应该是iptables的什么规则没有设置好,因为我使用了nwan,我也把nwan的很多脚本代码都修改了。现在的情况就是使用黑名单模式工作很正常,但是使用白名单模式就无法正常工作。 |
13
pheyx 2014-07-12 19:13:58 +08:00
@neroanelli
试着运行这一句,再看看: ip route replace $lan_subnet dev $lan_dev table vpn 其中lan_subnet是lan网段,lan_dev是lan 口设备名称,一般是br-lan |
14
jasontse 2014-07-12 19:23:20 +08:00 via iPad 1
@neroanelli
无法翻是什么意思,不通还是不生效? |
15
neroanelli OP @jasontse
不通。我举个例子吧,由于我添加了OUTPUT的iptables规则,所以我在路由的ssh中,可以直接wget youtube.com,也可以traceroute youtube.com,都能正确下载或者走我vpn的路由。而我使用了whitelist的iptables规则(iptables -A PREROUTING -t mangle -m set ! --match-set whitelist dst -j MARK --set-mark 8),在路由下面的机器都无法访问youtube,同时traceroute直接超时。 但是,最郁闷的是,我使用白名单模式,就是 iptables -A PREROUTING -t mangle -m set --match-set blacklist dst -j MARK --set-mark 8 所有一切都非常正常。 |
16
pheyx 2014-07-12 20:25:16 +08:00
|
17
neroanelli OP @pheyx
root@OpenWRT /root [#] ip route list table GFWVPN_rt default via 198.18.133.24 dev pptp-GFWVPN |
18
pheyx 2014-07-12 20:45:18 +08:00 1
@neroanelli
这样的话就清楚了,应该照我上面那个回复在GFWVPN_rt这个路由表添加一条路由: ip route replace 192.168.1.0/24 dev br-lan table GFWVPN_rt (其中192.168.1.0 是lan网段,参照你自己的修改。) 没这条路由的话在这个路由表里访问不了lan里的机器的。 |
19
neroanelli OP |
20
pheyx 2014-07-12 21:12:51 +08:00
@neroanelli
因为一旦ip rule 强制那些源或目地ip符合规则的包进入某个路由表,在你的情况是GFWVPN_rt这张表,这些包的命运只决定于这张表而不是main表。虽然main 表里有指向192.168.1.0/24的路由,但它对这些包不起作用。所以GFWVPN_rt里必须有跟main表里的192.168.1.0网段路由一致的那条路由。 你的白名单模式有效,具体原因不太清楚,可以ip route list table ?? 看看,另外可能和你的pptp vpn的设置里头是否是默认路由有些关系。 |
21
neroanelli OP |