![如何在 Linux 中的网桥之间进行路由?](https://linux22.com/image/699769/%E5%A6%82%E4%BD%95%E5%9C%A8%20Linux%20%E4%B8%AD%E7%9A%84%E7%BD%91%E6%A1%A5%E4%B9%8B%E9%97%B4%E8%BF%9B%E8%A1%8C%E8%B7%AF%E7%94%B1%EF%BC%9F.png)
我想为我的虚拟机创建网桥。我想从我的虚拟网桥访问互联网。我做了以下事情:
DEVICE=br1
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
我的网络中有一个桥接器(通过 dhcp),它与 eth0 相连:
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.110.14 netmask 255.255.255.0 broadcast 192.168.110.255
br0:
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=dhcp
eth0:
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
iptables 命令:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.110.14
但它不起作用。
ping -I br1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 192.168.1.1 br1: 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
61 packets transmitted, 0 received, 100% packet loss, time 59999ms
我做错了什么?请帮忙。
答案1
桥接在第 2 层,路由在第 3 层,iptables 在 3 层而不是 2 层运行。在桥接运行的第 2 层没有路由的概念。桥接使用第 2 层地址(例如 MAC 地址),并且帧直接传送到目标第 2 层地址。桥接发生在单个 LAN 上。路由发生在 LAN 之间,它使用第 3 层地址(例如 IP 地址)将数据包从一个 LAN 发送到另一个 LAN。在 LAN 上,帧封装数据包并用于将帧直接从一个主机发送到另一个主机。
LAN 上的主机将屏蔽目标的 3 层地址,以查看目标是否在其 LAN 上。如果是,它将为目标主机创建一个帧。如果不是,它将为其配置的网关(路由器)创建一个帧。在第 2 层,网关只是 LAN 上的另一台主机。执行路由的是网关,而不是网桥。是否将帧传送到目标主机或网关取决于源主机,而不是网桥。