V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
lanwairen123
V2EX  ›  OpenWrt

关于 openwrt 策略路由的配置,请大家帮忙看看错哪了

  •  1
     
  •   lanwairen123 · 2015-12-14 20:24:39 +08:00 · 870 次点击
    这是一个创建于 3274 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为我已经毕业了,学校图书馆订阅的一些期刊论文电子资源只有在学校内网才可以免费下载,正好跟学校机房的老师比较熟悉,给开了个内网的 Hyper-V 虚拟机,所以想通过这个虚拟机来实现在家里直接访问学校订阅的电子资源。

    现在情景是我在家里的 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
    
    第 1 条附言  ·  2015-12-15 19:43:11 +08:00
    自己解决了,原来添加 PREROUTING 链后 openwrt 内网的主机已经可以访问学校内网了,只不过 openwrt 本机还不能通过 VPN 访问学校内网,添加一条 mangle 表的 OUTPUT 链后, openwrt 本机也可以访问学校内网了,到此顺利实现在家访问学校内网资源的目的。
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2475 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:13 · PVG 10:13 · LAX 18:13 · JFK 21:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.