如何在 Linux 中的网桥之间进行路由?

如何在 Linux 中的网桥之间进行路由?

我想为我的虚拟机创建网桥。我想从我的虚拟网桥访问互联网。我做了以下事情:

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 上的另一台主机。执行路由的是网关,而不是网桥。是否将帧传送到目标主机或网关取决于源主机,而不是网桥。

相关内容