使用 nft 阻止两个桥接家庭网络之间的 DHCP

使用 nft 阻止两个桥接家庭网络之间的 DHCP

所以我的设置如下。我有两个家庭网络和一个位于其他地方的服务器。我在服务器上运行 OpenVPN 作为服务器,将两个家庭网络连接成一个大网络。因为我希望一切都对家庭网络上的所有用户透明,所以它是一个第 2 层桥接器。此外,在家庭网络上运行 OpenVPN 客户端的盒子也运行 DHCP 服务器,因此我可以相应地配置用户。

我使用子网 192.168.16.1/22 作为整个网络,但将 DHCP 池设置为 192.168.16.1/23 和 192.168.18.1/23。只是为了能够更容易区分。但是,DHCP 服务器通告的网络掩码为 255.255.255.252。

网关分别为 192.168.16.1 和 192.168.18.1。OpenVPN/DHCP 盒为 192.168.17.1 和 192.168.19.1。

OpenVPN 盒子都有一个以太网适配器 eth0,连接到本地网络,通过该适配器到达网关。它们有由 OpenVPN tap0 创建的适配器。以及虚拟桥接适配器 br0。eth0 和 tap0 都受 br0 控制,用于桥接本地网络和 VPN。

基本设置运行良好。但是有一个问题是 DHCP。由于它是第 2 层桥接器,因此 DHCP 也会被传输,导致远程家庭网络的 DHCP 服务器回复本地家庭网络上用户的请求。

我尝试在 OpenVPN 服务器上执行此操作。我认为那是最好的地方。但是,似乎我做不到。不幸的是,我不知道这是我的错(最有可能),还是其他原因。

我正在尝试使用 nft 来实现这一点。我正在运行 (几乎) 最新版本的 Arch Linux (当前内核版本为 4.8.10)。

我当前的 nft 配置改编自 [1] 和 [2],因为在 nft 上几乎找不到什么,如下所示。

# nft list ruleset
table bridge filter {
    chain input {
        type filter hook input priority -200; policy accept;
        iifname "tap0" udp sport bootps-bootpc counter packets 34 bytes  11569 drop
        iifname "tap0" udp dport bootps-bootpc counter packets 0 bytes 0 drop
    }

    chain forward {
        type filter hook forward priority -200; policy accept;
        iifname "tap0" udp sport bootps-bootpc counter packets 34 bytes 11569 drop
        iifname "tap0" udp dport bootps-bootpc counter packets 0 bytes 0 drop
    }

    chain output {
        type filter hook output priority -200; policy accept;
    }
}

如您所见,确实触发了一些规则。但是,规则总是同时触发,所以我猜是同一个数据包以及远程家庭网络上出现的数据包(通过数据包大小和仅与 DHCP 相关的数据包来识别)触发的。

编辑:通过的数据包似乎是广播。因此,它们可能似乎触发了 INPUT 和 FORWARD 链。

我尝试了很多不同的其他规则,部分使用 iptables,有时使用 inet 表的预路由或后路由挂钩,但似乎没有任何效果。

所以我不知道问题可能出在哪里。或者我的设置或思维有什么问题。

[1]http://www.linksysinfo.org/index.php?threads/block-dhcp-over-bridged-vpn.68790/#post-231073

[2]http://www.dd-wrt.com/wiki/index.php/OpenVPN_-_Site-to-Site_Bridged_VPN_Between_Two_Routers

相关内容