运行带有多个 USB 以太网适配器的 OpenWrt,以在一个 VLAN 上托管子域(全部使用单个静态 IP),并在另一个 VLAN 上使用 WireGuard VPN

运行带有多个 USB 以太网适配器的 OpenWrt,以在一个 VLAN 上托管子域(全部使用单个静态 IP),并在另一个 VLAN 上使用 WireGuard VPN

我有一台运行 Openwrt 的 Raspberry Pi 4 B 型,带有两个额外的 USB 以太网适配器。我的板载以太网端口当前已连接到 WAN。Wireguard 已安装但配置不正确。我还有一台 HP Procurve 2824 交换机,想在其上创建两个 VLAN。

我要实现的目标:

(1) 我希望第一个 USB 以太网适配器支持交换机上的 VLAN(VLAN1),该 VLAN 只能通过 Raspberry Pi 上运行的 WireGuard VPN 服务器访问。我想在这个 VLAN 上运行我自己的 DNS 服务器,还希望它能够从 github 提取代码。

(2) 其次,我的 Pi 有第二个 USB 适配器,我想在交换机上为其建立第二个 VLAN。

我希望此 VLAN(VLAN2)能够使用我的静态 WAN IP 地址。我目前廉价的 ISP 路由器接受到我为多个子域设置的唯一 IP 地址的流量。一个用于我的 Nextcloud 服务器,另一个用于我的测试机器。(例如:nextcloud.mydomain.com 和 test.mydomain.com)。我希望配置 Pi 以将 Nextcloud 的流量路由到我的 VLAN2 上的一个端口,将测试的流量路由到 VLAN2 上的另一个端口)。这些不会位于 VPN 后面,但应该是公开可访问的。这部分确实需要 VLAN 吗?或者我可以简单地为机器提供静态 IP 地址并将它们插入交换机(我不确定这将如何工作,如果我不创建 VLAN,交换机是否会简单地充当集线器?)

27/1/23 更新了以下内容:

我有 eth0(br-lan)作为到我的廉价 ISP 提供的华为路由器的专用连接,因为我不确定您希望我如何将互联网流量纳入其中。

您是否建议我将 ISP 提供的华为路由器直接插入交换机端口并以某种方式标记它以提供跨两个 VLAN 的互联网访问。如果是这样,我的路由器如何控制这一点?

我目前在 /etc/config/network 中有这个:

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd56:08f3:f438::/48'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth0'

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option ip6assign '60'
        option gateway '192.168.100.1'
        list dns '1.1.1.1'
        list ipaddr '192.168.100.253/24'

config device
        option name 'eth0'

config device
        option name 'phy0-sta0'

config device
        option name 'eth1'
        option acceptlocal '1'

config device
        option type '8021q'
        option ifname 'eth1'
        option vid '10'
        option name 'eth1.10'
        option ipv6 '0'

config device
        option type '8021q'
        option ifname 'eth1'
        option vid '20'
        option name 'eth1.20'
        option ipv6 '0'

config interface 'laan'
        option proto 'static'
        option device 'eth1.10'
        option ipaddr '192.168.7.1'
        option netmask '255.255.255.0'

config interface 'wan'
        option proto 'dhcp'
        option device 'eth1.20'

我相信交换机上的 VLAN 正在运行,因为当设备插入到任一 VLAN 的交换机时,openwrt 会显示 eth1.10 和 eth1.20 的流量,而移除时则会停止。

我只是不确定我到底拥有什么以及我是否朝着正确的方向前进。

答案1

VLAN 的重点在于无需安装额外的适配器。不要这样做,否则会丢弃 USB NIC。配置单个树干包含所有 VLAN 的链路标签。交换机本质上将充当路由器的“端口倍增器”。这种广泛使用的拓扑有时被称为单杆路由器

在交换机端,配置交换机时,需要指定一个用于连接 Raspberry Pi 的端口,创建 VLAN 并在该端口上为所有 VLAN 分配标记,同时根据需要(未标记或无访问权限)分配给其他端口。(端口上只能有一个 VLAN 未标记,该 VLAN 将成为该端口的“默认 VLAN”。)例如,您可能需要为 WAN 指定一个端口,其中 WAN VLAN 将设置为未标记,并且该 VLAN 将在 RPi 端口上设置为标记,在交换机的所有其他端口上设置为无访问权限。

在 Raspberry Pi 端,这是通过创建VLAN 子接口,然后 Linux 内核会帮你做必要的标记。然后,你就可以配置这些 VLAN 子接口上的所有 IP 地址等。

在 OpenWRT 中,这非常简单(以下内容可能是其中的一部分/etc/config/network):

config interface 'lan'
        option ifname 'eth0.10'
        option proto 'static'
        option ipaddr '192.168.7.1'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option delegate '0'

config interface 'wan'
        option ifname 'eth0.20'
        option proto 'dhcp'
        option delegate '0'

在这个例子中eth0物理接口名称如命令所示ip link;LAN 使用 802.1q VLAN ID 10,是eth0.10子接口的名称,该 VLAN 的未标记流量将出现在该子接口上;WAN 使用 802.1q VLAN ID 20,是eth0.20子接口的名称,将通过该子接口执行对该 VLAN 的访问。它是eth0.10eth0.20谁将拥有 IP 地址,如本例所示。

然后您可以继续使用 WireGuard(在同一个文件中):

config interface 'wg0'
        option proto 'wireguard'
        option private_key '...'
        option listen_port '51820'
        list addresses '192.168.9.7/24'

config wireguard_wg0
        option public_key '...'
        option endpoint_host '...'
        option endpoint_port '51820'
        list allowed_ips '192.168.9.1/32'
        list allowed_ips '0.0.0.0/0'
        list allowed_ips '::/0'

config wireguard_wg0
        option public_key '...'
        list allowed_ips '192.168.9.9/32'
        option persistent_keepalive '25'

config wireguard_wg0
        option public_key '...'
        list allowed_ips '192.168.9.3/32'
        option persistent_keepalive '25'

请注意,您不需要指定此配置所属的 WireGuard 接口以外的接口名称。它不绑定到接口,而是绑定到 IP 地址并按照系统路由表的指示使用接口。


顺便说一句,如果你在“传统”路由器(​​比如我使用的 TP-Link)上安装 OpenWRT,它将按照我刚才描述的方式进行配置;它的内部有一个带有单个以太网接口的 CPU(就像 Raspberry Pi 一样),在这种情况下,该接口具有名称,eth0并且内部连接到交换机芯片端口 0。我的交换机芯片将端口 1 设置为 WAN(因此 VLAN 20 在 0 上被标记,在 1 上未标记,其他端口上无访问权限),将端口 2、3、4、5 设置为 LAN(因此 VLAN 10 在 0 上被标记,在 2、3、4、5 上未标记,在 1 上无访问权限)。你基本上复制了这个设置,但有一点不同:你的计算机到交换机的连接将是明确的(一根电缆),交换机不是从计算机管理的,而是作为单独的独立设备管理的。

相关内容