我目前正在构建一个自制路由器,与之前的构建相比进行了一些更改以获得更大的灵活性。我正在运行一个 ubuntu 服务器最小基础,由 netplan 管理的网络接口,firewalld 用于防火墙管理,并尝试使用 kea 进行 dhcp
硬件是一台带有 5 个端口的迷你 PC - 2 个 10 gig 和 3 个 2.5G。我已在 netplan 中对其进行配置,将 2 个 10 gig 端口命名为 wan 和 lan,将 3 个 2.5 gig 端口命名为 eth0-2,以匹配硬件上的物理标签。我的最终预期目标是将 kea 设置为具有 LAN,并且端口 eth0 和 eth1 为一个子网提供服务,而 eth2 为不同的子网提供服务。
我已经在客户端上使用静态 IP 进行了测试 - 将路由器端 IP 设置为默认网关,这有效,所以我相当确定我的防火墙规则是健全的 - 我很乐意根据需要共享任何设置。我也得到了这个与单身的接口,但我想使用多个接口。理论上我可以桥接它们,但我想让一个子网正常工作,然后再尝试在另一个接口上添加第二个子网。
出于测试目的,并尝试获得最小可行产品,我尝试首先让 lan 和 eth0 正常工作。
我已将 lan 配置为 10.0.0.1,将 eth0 配置为 10.0.0.2
我在下面分享了 kea-dhcp4 conf 文件的最小片段,但是完整版在这里
我这里有几个问题。首先,如果我像这样添加多个接口
"interfaces-config": {
"interfaces": [ "lan", "eth0" ]
},
它仅服务于 lan,而不服务于 eth0。理论上我可以桥接它们,但我想稍后在 eth2 上提供不同的范围。如果我只有 eth0 或 lan 但不能同时拥有两者,它就可以工作。
这似乎是一个有效的设置,因为如果我运行 sudo kea-dhcp4 -t /etc/kea/kea-dhcp4.conf
我得到
023-09-17 14:16:33.423 INFO [kea-dhcp4.hosts/1824.139761470586496] HOSTS_BACKENDS_REGISTERED the following host backend types are available: mysql postgresql
2023-09-17 14:16:33.423 WARN [kea-dhcp4.dhcpsrv/1824.139761470586496] DHCPSRV_MT_DISABLED_QUEUE_CONTROL disabling dhcp queue control when multi-threading is enabled.
2023-09-17 14:16:33.423 WARN [kea-dhcp4.dhcp4/1824.139761470586496] DHCP4_RESERVATIONS_LOOKUP_FIRST_ENABLED Multi-threading is enabled and host reservations lookup is always performed first.
2023-09-17 14:16:33.423 INFO [kea-dhcp4.dhcpsrv/1824.139761470586496] DHCPSRV_CFGMGR_ADD_IFACE listening on interface lan
2023-09-17 14:16:33.423 INFO [kea-dhcp4.dhcpsrv/1824.139761470586496] DHCPSRV_CFGMGR_ADD_IFACE listening on interface eth0
2023-09-17 14:16:33.423 INFO [kea-dhcp4.dhcpsrv/1824.139761470586496] DHCPSRV_CFGMGR_SOCKET_TYPE_DEFAULT "dhcp-socket-type" not specified , using default socket type raw
2023-09-17 14:16:33.423 INFO [kea-dhcp4.dhcpsrv/1824.139761470586496] DHCPSRV_CFGMGR_NEW_SUBNET4 a new subnet has been added to configuration: 10.0.0.0/24 with params: t1=900, t2=1800, valid-lifetime=3600
实际的子网设置可能在这里很有用,所以我在下面分享了它们
"subnet4": [
{
// Subnet identifier should be unique for each subnet.
"id": 1,
// This is mandatory parameter for each subnet.
"subnet": "10.0.0.0/24",
//testing explicit interfaces. Can't do more than 1
//"interface": "eth0"
"pools": [ { "pool": "10.0.0.51 - 10.0.0.200" } ],
"option-data": [
{
"name": "routers",
"data": "10.0.0.1, 10.0.0.2"
}
],
"reservations": [
{
"hw-address": "xx:xx:xx:xx:xx:xx",
"ip-address": "10.0.0.50"
}
]
],
不幸的是,我的测试客户端系统正在运行Windows - 但据我所知,它只给出了第一个默认网关,我怀疑这会破坏路由。
有什么方法可以在同一子网中使用一个或多个接口吗?
答案1
经过一些实验,我在一个子网上不能有多个路由器(因此实际上不可能有多个接口为子网提供服务),因为它将始终为第一个 IP 提供服务,并且“最佳”解决方案更接近我需要的是桥梁。
然而,由于接口速度的混合,这最终会破坏我的 10 GB 链路,因此我最终采用了具有 2 个子网的设置 - 2.5 GB 链路在一个子网上桥接,10 GB 链路在另一个子网上桥接。他们无法真正互相交谈(但这是另一个问题)。
我打算为物联网设备建立一个隔离的子网,所以这不是也不好,我可以通过开关来缓解部分问题。