Linux:将两个以太网连接桥接在一起,以允许第二个主机连接到第一个networking

情况:

networkingA < – >服务器< – >客户端主机

我想允许客户端主机通过网访问networkingA,允许两台主机通过一个以太网连接访问networkingA.

这些都是物理设备,我正在使用Linux / Ubuntu机器。

于是我创build了一个网桥ntlbridge0并且在服务器上ntlbridge0两个以太网设备eth0 (到networkingA)和eth1 (到客户端)。

服务器和客户端都通过DHCP获取IP地址。 (由路由器的Mac地址分配)

我应该如何设置这个连接,以便客户端可以从networking获取DHCP租约?

当客户端正在尝试连接时,它还没有IP地址,所以我不知道如何制定一个防火墙规则来允许来自eth1eth0stream量,而不会给ufw / iptables一个IP地址来伪装或转发至。

理想情况下,我希望服务器和客户端对同一级别的networkingA可见。 (每个应该有自己的IP,所以networkingpipe理员的“共享互联网”将不起作用。)和客户端的MAC地址应该是可见的networking(以便它从路由器得到正确的IP。

我早些时候做了这个工作(现在我不能确定),但是现在即使在禁用防火墙并重新创build连接之后,我也不能再继续工作了。

更多细节:

  • 使用networkingpipe理器提供的所有设备
  • 为了安全,UFW应该在两台主机上保持启用状态
  • 我正在服务器和客户端之间使用补丁电缆(这是否仍然重要?)
  • 所有服务器连接都正常工作,并且在没有通过服务器进行桥接时,客户端连接正确。

在服务器上:

路线
内核IP路由表
目标网关Genmask标志度量参考使用Iface
默认192.168.10.1 0.0.0.0 UG 426 0 0 ntlbridge0
 192.168.10.0 * 255.255.255.0 U 425 0 0 ntlbridge0
 192.168.10.0 * 255.255.255.0 U 426 0 0 ntlbridge0

 nmcli开发状态
设备types状态连接
 ntlbridge0桥连接桥ntl
 enp1s0f0以太网连接ntlbridge0从站enp1s0f0 
 enp1s0f1以太网连接ntlbridge0从站enp1s0f1

请求进一步信息:

 IP链接显示
 1:lo:mtu 65536 qdisc noqueue state UNKNOWN模式默认组默认qlen 1
    链接/回放00:00:00:00:00:00 brd 00:00:00:00:00:00
 2:enp1s0f0:mtu 1500 qdisc mq master ntlbridge0状态UP模式DEFAULT组默认qlen 1000
     link / ether d0:27:xx:xx:xx:40 brd ff:ff:ff:ff:ff:ff
 3:enp1s0f1:mtu 1500 qdisc mq master ntlbridge0状态UP模式DEFAULT组默认qlen 1000
     link / ether d0:27:xx:xx:xx:41 brd ff:ff:ff:ff:ff:ff
 9:ntlbridge0:mtu 1500 qdisc noqueue状态UP模式DEFAULT组默认qlen 1000
     link / ether d0:27:xx:xx:xx:40 brd ff:ff:ff:ff:ff:ff

 IP地址显示
 1:lo:mtu 65536 qdisc noqueue state UNKNOWN组默认qlen 1
    链接/回放00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1/8作用域主机lo
       永远永远的preferred_lft永久valid_lft
     inet6 :: 1/128作用域主机 
       永远永远的preferred_lft永久valid_lft
 2:enp1s0f0:mtu 1500 qdisc mq master ntlbridge0状态UP组默认qlen 1000
     link / ether d0:27:xx:xx:xx:40 brd ff:ff:ff:ff:ff:ff
 3:enp1s0f1:mtu 1500 qdisc mq master ntlbridge0状态UP组默认qlen 1000
     link / ether d0:27:xx:xx:xx:41 brd ff:ff:ff:ff:ff:ff
 9:ntlbridge0:mtu 1500 qdisc noqueue状态UP组默认qlen 1000
     link / ether d0:27:xx:xx:xx:40 brd ff:ff:ff:ff:ff:ff
     inet 192.168.10.67/24 brd 192.168.10.255范围全局dynamicntlbridge0
        valid_lft 50187sec preferred_lft 50187sec
     inet6 2601:844:4000:xxx:xxx:xxxx:xxxx:ac61 / 64作用域全局noprefixroutedynamic 
        valid_lft 2367sec preferred_lft 2367sec
     inet6 fe80 :: 1e94:xxxx:xxxx:77ba / 64作用域链接 
       永远永远的preferred_lft永久valid_lft

 ip路由显示
默认通过192.168.10.1 dev ntlbridge0 proto静态指标425 
 172.17.0.0/16 dev docker0 proto kernel scope链接src 172.17.0.1 linkdown 
 192.168.10.0/24 dev ntlbridge0 proto内核作用域链接src 192.168.10.67 metric 425 
 192.168.10.0/24 dev ntlbridge0 proto内核作用域链接src 192.168.10.67 metric 426 
 192.168.122.0/24 dev virbr0 proto kernel scope链接src 192.168.122.1 linkdown

 brctl显示
网桥名称bridge id STP使能的接口
 docker0 8000.0242910e3b7a no      
 ntlbridge0 8000.d027xxxxxx40是enp1s0f0
                                 enp1s0f1

Soooooooo这里有个关于在现代内核中进行桥接的有趣的事情……你可以告诉内核通过iptables发送通过网桥的数据包​​,并且它们被看作是完全一样的,就好像它们在第3层被转发一样。你真的想要这个,但一些发行版或内核版本或默认情况下(默认情况下可能为了安全,这是可以理解的,如果感到沮丧的话)。

检查sysctls /proc/sys/net/bridge/bridge-nf-call-* 。 如果其中任何一个为1 ,则使用相应的过滤系统来匹配数据包(用于IPv4数据包的iptables ,用于IPv6数据包的ip6tables )。 将它们设置为0来closures这个东西,你会看到一个愉快的改进。

在你的问题中确实没有足够的信息来确定发生了什么事情,但bridge-nf-call-* sysctl始终是我在桥接播放时所看到的第一位。

除此之外,不涉及所有涉及的接口,几乎不可能知道发生了什么事情,问题可能在哪里。