最近在折腾旁路由,然后出现了一个需求:对于不同的设备,要指定不同的路由。
比如说
- 绝大部分普通设备(比如各种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,只要注意网络那边手动写之前创建好的br0
,Device mode
选virtio
(性能最好)就好了。
之后配置这个虚拟机开机自动启动:
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,如果已经是旁路由的地址了,说明配置没问题,可以自由地上网了。
而其它设备不受影响,还是走原来的路由。
完工。