概括:
假设有一个具有 3 个物理以太网接口的 Linux 系统(Ubuntu 16.04):
eth0:WAN eth1:EAPoL 身份验证器 eth2:客户端 LAN
我正在尝试配置这个:
- 桥接 br0:eth0<->eth1
- ebtables 规则仅转发 EAPoL 流量
- 对剩余流量进行 IP NAT br0<->eth2(除 EAPoL 类型的以太网帧之外的所有内容)
- eth0 端口将使用伪造的 mac(与 EAPoL 身份验证器匹配)
这里期望的最终结果是连接到 eth2 的客户端计算机可以连接到 WAN。WAN 需要 802.1x 身份验证,这将桥接到连接到 eth1 的 EAPoL 身份验证器设备。
我最初受到这篇文章的启发,但是在使他的配置正常工作时遇到了麻烦:
https://www.dslreports.com/forum/r30708210-AT-T-Residential-Gateway-Bypass-True-bridge-mode
问题:
1.) 桥接配置似乎有效,tcpdump 将显示 eth1 上的 EAPoL 流量,但是我无法让 vlan 获取 dhcp 信息,使用 dhclient 就会挂起。我不确定我是否理解此处 vlan 的用途,如果我欺骗 eth0 的 mac,这部分是否有必要?
2.) 我不清楚如何对 eth0<->eth2 之间的剩余流量(非 EAPoL 的流量)进行 NAT。我是否应该在接口之间定义一个 iptables NAT,如下所示:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth2 -j ACCEPT
iptables -A INPUT 1 -i eth2 -j ACCEPT
我遇到的问题是,我只能配置其中一个,而不能同时配置两者。我可以让系统在 eth0<->eth1 之间桥接 EAPOL,也可以在 eth0<->eth2 之间进行 IP NAT,但我无法配置两者协同工作。有什么建议或意见吗?
谢谢
编辑:
ebtables 配置用于过滤 EAPoL 流量的以太网帧:
ebtables -t filter -A FORWARD -i eth1 -p 802_1Q --vlan-encap 0x888e -j ACCEPT
ebtables -t filter -A FORWARD -i eth1 -p 802_1Q -j DROP
ebtables -t filter -A FORWARD -o eth1 -p 802_1Q --vlan-encap 0x888e -j ACCEPT
ebtables -t filter -A FORWARD -o eth1 -p 802_1Q -j DROP