在 Arch Linux 上,我希望 eth0(连接到桥接路由器)共享从 wlan0 收到的连接,我已经阅读了教程,但我不像其他用户那样精通命令,也不完全理解。
答案1
更新
无法在无线(客户端又称站点模式)和有线接口之间建立桥接根据 linux-ath5k-devel 上的这个帖子。
设置 NAT
应该设置 NAT:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
分配 IP
然后你必须为自己分配 IP 地址:
ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up
安装 dhcp 守护进程
安装 dhcp 服务器并将以下文本添加到其配置文件中(在 /etc/dhcpd.conf 或类似文件中)
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.120;
option routers 10.0.0.1;
option domain-name-servers the-ip-address-you-have-in-etc-resolv.conf;
}
启动 dhcpd
然后启动它 /etc/init.d/dhcpd start
就是这样!
如果您对不起作用的桥接设置感兴趣,请阅读以下内容
brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0
首先创建一个桥接接口我选择一个任意名称我的桥然后向其中添加接口。
您应该请求一个新的 IP 地址(仅当您想为桥接设备本身获取有效 IP 时才需要这样做):
dhclient -d mybridge
答案2
到桥接无线网络您可以使用iw
工具来启用 4addr同样地:
# iw dev <wifiInterface> set 4addr on
IE:
# brctl addif <bridgename> <wifiInterface>
can't add <wifiInterface> to bridge <bridgename>: Operation not supported
# iw dev <wifiInterface> set 4addr on
# brctl addif <bridgename> <wifiInterface>
现在它应该可以工作了。您可以使用以下方式显示桥梁:
# brctl show
答案3
桥接 wlan 和 4addr:
桥接 wlan0 很麻烦。通常无法将其添加到桥接接口(brctl 返回“操作不允许”),并且使用 VirtualBox“桥接”过滤器会导致大量 ARP 和 DHCP 冲突。造成这种情况的原因是 802.11 帧默认仅包含三个地址:两个无线设备(笔记本电脑和 AP)的 MAC 地址以及最终接收者(如以太网)的 MAC 地址。始终假设只有一个可能的发起者。
802.11 可以携带第四个地址,即发起者的 MAC 地址,中继器在 WDS 模式下会使用该地址。此功能也可以在 Linux 上使用 iw 启用,启用此模式将允许 wlan0 用于桥接接口以及 VirtualBox 桥接网络:
iw dev wlan0 set 4addr on
但是,启用 4addr 后,AP 可能会完全忽略您:关联成功,但所有数据帧都会消失在以太中。这可能是出于安全原因(因为伪造源 MAC 地址非常困难。是的。)在我的路由器(运行 OpenRG)中,需要为无线 AP 接口启用“WDS”模式,添加限制为我的笔记本电脑 MAC 地址的 WDS 设备,并将其添加到 LAN 桥接器。4addr 数据包现在可以正常工作了。
不过,这还存在另一个问题——路由器现在拒绝来自笔记本电脑的三地址数据包,这可能相当不方便(每次更改 WLAN 网络时都必须切换 4addr)。解决方法是在笔记本电脑上添加链接到同一设备但具有不同 MAC 地址的第二个无线接口。首先撤消先前的配置:
iw dev wlan0 set 4addr off
然后,添加第二个接口(名称是任意选择的),并使用不同的 MAC 地址:
iw dev wlan0 interface add wds.wlan0 type managed 4addr on
ip link set dev wds.wlan0 addr <addr>
ip link set dev wds.wlan0 up
此处必须与路由器中配置的 WDS 设备地址匹配;除此之外,它可以是任何有效的 MAC 地址。wlan0 的原始 MAC 则保留用于“正常”使用。
可以同时使用 wlan0 和 wds.wlan0 – 虽然我只测试过两次与同一个 AP 关联,而没有测试过与不同的 AP 关联。我猜它们至少需要在同一频道上。
有人问,既然 VirtualBox 可以“完美”桥接 WiFi,为什么还要使用这个。答案是 VirtualBox 不会发送虚拟机的 MAC 地址;相反,它也在 MAC 层执行 NAT。– 2014-08-22
直接 WLAN 桥接
在某些情况下,您也可以使用 wlan_kabel。它使用数据包套接字直接将 wlan* 设备与以太网设备桥接。但是,您一次只能使用 wlan_kabel 桥接一个 MAC。它没有被接入点禁止的缺点,因为只使用 wlan 设备的原始 MAC。在您的情况下,这意味着 wlan0 只能由一个 VM 使用,甚至不能由主机使用。您可以获得wlan_kabel 这里.这类似于麦克维兰斯解决方案。
使用 ipvlan 进行桥接
IP Vlan 没有网桥的限制,它可以用来桥接网络有关如何使用它的详细信息可以在这里找到
化装舞会替代品
Linux 路由可以与 iptables-masquerade 和 ip_forward 一起使用来实现桥接,但是如上所述,这需要启用 ip_forward 并使 Linux 充当路由器,这需要小心设置,因为它可能会引入一些安全问题。
# bridge setup
brctl addbr br0
ifconfig br0 10.10.20.1/24 up
# enable ipv4 forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
# netfilter cleanup
iptables --flush
iptables -t nat -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# netfilter network address translation
iptables -t nat -A POSTROUTING -o wlan0 -s 10.10.20.0/24 -j MASQUERADE
然后接口 br0 将可以访问 wlan0 网络
重要且相关
另外,非常重要的是,你不应该使用过时的、弃用的命令,例如ifconfig,brctl等等。iproute2 套件包含所有这些命令,包括设置虚拟接口(我们曾经不得不使用 openvpn 来实现)和创建网桥。如果您不知道如何使用 ip 设置网桥,请看这里
ip tuntap add tap0 mode tap user root
ip link set tap0 up
ip link add br0 type bridge
ip link set tap0 master br0
ip link set eth0 master br0
ip addr add 10.173.10.1/24 dev br0
ip link set br0 up
使用这组命令,我们创建一个名为 tap0 的虚拟接口,然后创建一个名为 br0 的网桥,然后将 eth0 和 tap0 绑定到网桥,我们为其分配一个 IP 地址 10.173.10.1,然后将其全部启动。需要三个单独的实例来启动接口(针对 tap0、eth0 和 br0)。
使其工作的技巧是使用 proxy.arp,它允许您的电脑(而不是您的 VM/Linux 容器/网络命名空间)代替它们回答 ARP 查询。
换句话说,通过在硬件接口和虚拟接口之间使用 IPv4 转发,您认为可以将 VM/LXC/NNS 连接到 LAN,就像它是物理接口一样,但事实并非如此:您忘记了绝对基本的 ARP 流量,而这才是真正允许 LAN 运行的。因此,问题是:如果我正确转发 IPv4 流量,我如何转发 ARP 流量,以便我的 VM/LXC/NNS 正常工作?诀窍是使用代理 arp。
完整答案在Bohdi Zazen 的博客,标题很有启发性:桥接无线网卡。他使用过时的软件包 uml-utilities 通过命令 tunctl 创建虚拟接口:这是他使用 uml-utilities 的唯一命令,因此您可以放心地忽略下载软件包,并使用我上面写的命令创建 tap 或 tun 接口,无论您喜欢哪个,只需相应地修改命令即可。然后为您的 LXC 创建一个 veth 对,现在在 tap0 和 veth0 之间创建一个桥接。这个桥接称为 br0,您必须为其使用代理 arp,而不是 Bohdi Zazen 描述的简单 tap0 接口。
资料来源:askubuntu.com,nullroute.eu.org,firejail.wordpress.com,超级用户网
答案4
其他答案中描述的 4addr 无疑是适配器/驱动程序支持的最佳方式,但并非所有方式都支持。NAT 可能适用于某些情况,但在局域网上双向进行正确通信将变得有问题(例如,连接打印机或访问 NAT 另一侧的其他 IoT 设备)。任何依赖广播/多播(例如,自动发现、bonjour)的操作都将通过 NAT 失败。
另一种方法是使用 ARP 代理(parprouted),如https://wiki.debian.org/BridgeNetworkConnectionsProxyArp。我在 Raspberry Pi 上为打印机设置了这个,它运行得很好(我在命令中添加了 10 秒的休眠时间,post-up
让它先获取 IP 地址,这可能与我的旧 RPi 的速度慢有关……)