现在情景是我在家里的 openwrt 路由器上使用 tinc (一个 P2P V.P.N )连接到香港 SL 的 VPS 上,然后在我学校内网的 Hyper-V 虚拟机( Debian8 系统)上同样用 tinc 连接到 VPS ,这样 openwrt 和学校内网的虚拟机就可以组成一个内网,然后我分别在路由器和虚拟机上做了 MASQUADE 转发。
openwrt 路由器的 tinc 内网地址是 10.0.10.2 虚拟机的 tinc 内网地址是 10.0.10.20 做完 MASQUADE 转发后,我可以在家里的内网直接访问 10.0.10.20 ,并且在路由器上设置静态路由后,家里的内网还可以直接访问学校内网,并且像 CNKI ,重庆维普,万方数据这样的网站,通过 dig 查到 IP 后设置静态路由经过虚拟机内网 10.0.10.20 也可以通过 IP 登录。
但是这样不太方便,每个网站都要 dig 找 IP ,一些网站有多个 IP 设置也比较麻烦,所以想到使用 dnsmasq+ipset+ip route 策略路由的方式来实现,这样就可以只是在 dnsmasq 里面设置需要通过 tinc V.P.N 访问的域名,就可以了,并且还支持泛域名,比之前的要方便的多。
实现过程如下:
#!/bin/sh
ipset -N -! beihua iphash
#[ $(ipset list beihua 2>/dev/null| wc -l) -eq 0 ] && { ipset -N beihua iphash; }
ip route add default via 10.0.10.20 dev tinc0 table 200
ip rule add fwmark 0x14 table 200
iptables -t mangle -I PREROUTING -m set --match-set beihua dst -j MARK --set-mark 0x14
首先设置一个 ipset 叫 beihua ,然后设置一个叫 200 的路由表默认通过 tinc0 ,通过 iptables 将 beihua 打上 0x14 标签,然后将这个标签通过路由表 200.
然后我通过 ipset 添加了一个学校内网的 IP , ipset add beihua 10.5.2.254 ,但是 traceroute 发现并没有通过我设置的路由表,折腾了一下午,实在找不出原因,所以写出来请大家帮忙看看,是哪里配置错了。
[root@MagicBox:/root]#ipset list beihua
Name: beihua
Type: hash:ip
Revision: 2
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 8264
References: 1
Members:
10.5.2.254
[root@MagicBox:/root]#iptables -t mangle --list -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
MARK all -- 0.0.0.0/0 0.0.0.0/0 match- set beihua dst MARK set 0x14
fwmark all -- 0.0.0.0/0 0.0.0.0/0
SS_SPEC_TPROXY udp -- 0.0.0.0/0 0.0.0.0/0 ! match-set ss_spec_lan_ac src /* _SS_SPEC_RULE_ */
[root@MagicBox:/root]#ip rule list
0: from all lookup 128
0: from all fwmark 0x1/0x1 lookup 100
0: from all fwmark 0x14 lookup 200
1: from all lookup local
32766: from all lookup main
32767: from all lookup default
[root@MagicBox:/root]#ip route list table 200
default via 10.0.10.20 dev tinc0
[root@MagicBox:/root]#traceroute 10.5.2.254
traceroute to 10.5.2.254 (10.5.2.254), 30 hops max, 38 byte packets
1 192.168.1.1 (192.168.1.1) 5.040 ms 1.980 ms 1.800 ms
2 hn.kd.ny.adsl (123.14.144.1) 18.100 ms 14.740 ms 12.860 ms