挖井

类库大魔王的挖井日记

马上订阅 挖井 RSS 更新: https://blog.ismisv.com/feed.xml

配置Debian路由器双WAN接入

2022年11月3日 08:00

鉴于移动免费送了1年200M的一条宽带,没多犹豫决定还是要用起来。经过一番折腾,基本搞好了,目前的情况大概是这样的:

家中网络拓扑家中网络拓扑弱电箱电信光猫移动光猫R86S软路由TP-Link SG1210PPoE千兆交换机@弱电箱TP-Link千兆交换机@客厅TP-Link千兆交换机@主卧HTPC一些服务程序如Git Server等主卧86面板AP5G WIFI以太网口次卧86面板AP5G WIFI以太网口餐厅86面板AP2.4G & 5G WIFI以太网口客厅86面板AP2.4G & 5G WIFI以太网口TL-AC100MacMini吃灰备用Windows小主机主力开发机Debian曾经的主力旁路由@PVEFreeBSD学习实验用@PVENetBSD学习实验用@PVEOpenBSD学习实验用@PVEDragonflyBSD学习实验用@PVEWindows台式机TP-Link监控摄像头TP-Link监控摄像头Chromecast电视机智能门锁

2年前也写过文章提到过家里的网络拓扑,大的变化没有,只是加了一些新设备。现在在原有电信宽带的情况下,新增一条移动宽带,主要就是把接入路由器换了,原本的TP-Link R470GP只能接入一个WAN,正好目前R86S比较火,买了个最便宜的版本,先不考虑自己折腾猫棒,能双线以太网口接入就行。另外从闲鱼收了一个TP-Link SG1210P,索性把所有面板都从同一个交换机连上,情况会简单很多。

TP-Link SG1210P有3种工作模式,其中VLAN模式和视频监控模式,LAN中的设备只能与上游接入设备通信,我这里客厅的HTPC要与主卧的诸多设备互通,所以要把TP-Link SG1210P切换到标准模式。

剩下的工作就是把R86S配置好,顺便把原来HTPC/Debian上的科学上网工作也移到R86S上。我给R86S装了最新的Debian 11,网上看其他做软路由的文章/视频99.9%是刷OpenWRT,我为什么不用呢,有几个原因:

  1. 首先最重要的是,Debian是我最喜欢的Linux发行版,没有之一。从图上可以看到,客厅的HTPC,主卧的曾经的主力旁路由,都是装的Debian,我所有的VPS上也都用的Debian。
  2. 其次,我觉得OpenWRT的可玩性不如Debian好,Debian做路由系统需要自己动手做的事更多,但另一方面讲也更自由。
  3. Debian官方仓库的软件包更多更可信,OpenWRT这方面差一点,系统和软件包的魔改版本太多,全都自己编译的话太费时费力。
  4. 最后,对OpenWRT的质量不太信任,之前买了个GL.iNet MT1300,刷的是厂商定制的OpenWRT,升级系统没一次是没问题的。而我这么多不同硬件环境下的Debian系统大版本升级没一次是有问题的。

再来讲如何将Debian配置成一个路由器。我的R86S是最低配的那款,只有3个以太网口,规划好3个口的用途,将外壳上标记的eth0和eth1作为WAN口,连接运营商的光猫,eth2作为LAN口,连接屋内的交换机。

首先,在sysctl中将包转发功能打开(我不使用IPv6,不实用),root打开文件/etc/sysctl.conf,顺便把BBR也打开:

net.ipv4.ip_forward=1
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

再运行一下sysctl -p使其生效。

然后配置网络连接,我有3个网口,分别是enp1s0enp2s0enp3s0,前2个分别接入电信和移动宽带,第3个作为LAN,编辑/etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto enp1s0
iface enp1s0 inet dhcp
#iface enp1s0 inet6 dhcp

auto enp2s0
iface enp2s0 inet dhcp
#iface enp2s0 inet6 dhcp

auto enp3s0
iface enp3s0 inet static
    address 192.168.233.1
    netmask 255.255.255.0

如果想用IPv6,可以把inet6那两行注释去掉,我不用,所以就注释掉了,都使用DHCP从光猫获取IP。把内网网段设为192.168.233.x,本机作为路由器即网关,就用192.168.233.1。再设置一下iptables转发参数,运行命令:

1
2
iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE

这时已经可以上网了,比如敲个命令curl www.baidu.com看一下,可以得到返回的内容。如果有其他设备接入enp3s0的口,并手动将IP和子网掩码,网关分别设置到192.168.233.x255.255.255.0192.168.233.1,其中x是[2,255]间的整数。

接着使用dnsmasq作为DHCP服务器。安装好后编辑配置文件/etc/dnsmasq.conf

interface=enp3s0
dhcp-range=192.168.233.200,192.168.233.250,255.255.255.0,12h
dhcp-option=option:router,192.168.233.1
dhcp-option=option:dns-server,192.168.233.1

内容很简单:第1行,将服务绑定到第3个网口,第2行,设定自由分由的IP地址池以及有效时间,第3行,告知客户端使用的网关IP,第4行,告知客户端使用的DNS服务器地址。还可以绑定IP和mac地址,这样可以在后续针对某个设备做些特殊的设置:

dhcp-host=00:e0:4c:68:2a:5f,192.168.233.166
dhcp-host=00:e0:4c:68:2a:60,192.168.233.66
dhcp-host=00:1E:65:41:73:C2,192.168.233.16...

剩余内容已隐藏

查看完整文章以阅读更多