Monthly Archives: April 2020

单口旁路由,以及配置不同的设备用不同的路由

最近在折腾旁路由,然后出现了一个需求:对于不同的设备,要指定不同的路由。
比如说

  • 绝大部分普通设备(比如各种IoT设备)走原来的路由,全部在墙内;
  • 指定几个设备(比如说手机、iPad等)走旁路由,由旁路由来分流墙内外的流量。

发现用dnsmasq的话,这个问题很好解决,于是顺便写个文章记录一下。

旁路由

家里的网络很简单,电信光猫改桥接,路由器接光猫,所有设备都在一个LAN里。
之前看一些测试,路由器翻墙的话,性能有瓶颈,而当NAS用的蜗牛星际平时很闲,正好用来做旁路由。
目标是,在KVM虚拟机里面运行Lede,只开科学上网工具。

配置KVM

我的蜗牛星际是单口千兆的版本,所以必须配置bridge来给KVM虚拟机用。
Ubuntu用netplan来配置很简单:

$ cat /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: no
      dhcp6: no
  bridges:
    br0:
      interfaces: [enp3s0]
      dhcp4: no
      dhcp6: no
      addresses: [<lan-ip>/24]
      gateway4: <lan-gateway>
      nameservers:
        addresses: [<nameservers>]
      parameters:
        stp: true

然后 netplan apply就好了

安装好KVM之后,运行virt-manager用图形界面创建虚拟机(这样方便一点),加载lede的image,只要注意网络那边手动写之前创建好的br0Device modevirtio(性能最好)就好了。

之后配置这个虚拟机开机自动启动:

virsh autostart lede # lede是建VM时起的名字

配置lede

初次使用时,lede默认的IP是192.168.1.1,可以在console里先把它的IP改成自己想要的。

virsh console lede
## 之后就是在lede的VM里操作
# cat /etc/config/network
...
config interface 'lan'
        option ifname 'eth0'
        option proto 'static'
        option ipaddr '<ip>'   # 设置Lede的LAN IP
        option netmask '255.255.255.0'
        option gateway '<gateway>'
        option ip6assign '60'
        option multipath 'off'
        option dns '<dns, or gateway>'
...

# /etc/init.d/network restart #重启网络服务

然后可以在浏览器里打开lede,在网络->接口的配置里

  • 把LAN口的DHCP关掉
  • 在WAN口的物理设置里,取消“桥接接品”,接口选eth0(因为我只有一个网口)
  • 在WAN口的基本设置里,选”DHCP客户端”

现在LEDE就可以愉快地上网啦。

配置v2ray

装旁路由的目的就是为了科学上网,我一般用v2ray。
这个东东本来应该在Lede的软件中心里出现的,不过由于”你懂的“原因,它下架了,只能手动下载离线包,离线安装。

  • 自行Google “离线 v2ray_2.3.7.tar.gz”(后果自负),比如说,https://github.com/hq450/fancyss_history_package/tree/master/fancyss_X64,安装好。
  • 在服务器列表里,导入 vmess::// 头的链接
  • 在帐号设置里,选一个服务器,根据自己需要选“大陆白名单”或者gfwlist,打开”代理开关“,看到国外链接正常的时候,说明没问题了。

配置不同设备用不同的路由

这个时候如果手动配置一个设备的gateway到Lede的LAN IP,就能正常科学上网了。
不过我希望由DHCP server来给指定的设备(比如说根据mac地址)来分配不同的gateway。
Google之后发现,dnsmasq正好可以用来做这事儿,而我主路由的梅林固件正好就是用dnsmasq的,并且还用它来支持电信IPTV。
原理是,通过对mac地址打tag,然后根据tag来设置对应的gateway和nameserver (参考 http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html)

# cat /jffs/configs/dnsmasq.d/customgateway.conf
dhcp-mac=red,<mac1>   # 把要使用旁路由的设备的mac地址写在这里,用相同的tag名字
dhcp-mac=red,<mac2>
dhcp-option = net:red, option:router, <gateway-IP>   # 指定旁路由的IP作为gateway
dhcp-option = net:red, 6, <nameserver-IP>   # 指定旁路由的IP作为nameserver(也可以用自定义的nameserver,看需求)

然后重启dnsmasq服务

# service restart_dnsmasq

需要注意的是,有些手机可能会用随机的MAC地址,在手机上设置一下,连家里的wifi,就用真正的mac地址吧。
手机、iPad连上wifi之后,看一下gateway,如果已经是旁路由的地址了,说明配置没问题,可以自由地上网了。
而其它设备不受影响,还是走原来的路由。

完工。

Share