场景

  • NAS 有两个网口:
    • enp37s0 → WAN(上游路由器 / ISP DHCP)
    • enp38s0 → 接电脑
  • 目标:
    • NAS 自己和电脑都能从 WAN 的 DHCP 获取地址,并访问外网。

一、常规做法(标准 Linux 环境)

1. 创建桥

BASH
sudo ovs-vsctl add-br br0

在 常规 Linux 环境 推荐使用 br# 作为统一的桥命名。

2. 添加物理接口

BASH
sudo ovs-vsctl add-port br0 enp37s0
sudo ovs-vsctl add-port br0 enp38s0

3. 清理物理口 IP

BASH
sudo ip addr flush dev enp37s0
sudo ip addr flush dev enp38s0

4. 给 NAS 自己的桥接口获取 IP

BASH
sudo dhclient br0

在常规 Linux 下,这样就能让 电脑和 NAS 都通过 DHCP 获取 IP,互相可达并访问互联网。


二、飞牛OS下的特殊情况

新系统记得sudo ovs-vsctl add-port enp37s0-ovs enp38s0,每次都忘!

遇到的问题

  • NAS GUI 不允许自定义桥名,只能通过“指定网口启用 OVS”来创建桥,名字固定为 物理口-ovs,例如 enp37s0-ovs。
  • 电脑(接在 enp38s0)能上网,但 NAS 本机(IP 在 internal 口 enp37s0-ovs)无法访问外网,ping 网关/电脑都丢包。

问题原因

  • OVS 创建的 internal 口(enp37s0-ovs)默认不参与物理转发。
  • internal 口使用了随机生成的 MAC,导致 DHCP/ARP 不匹配,上游交换机/路由器无法识别 NAS 的 IP 请求。

解决方法

1. 确认桥和端口

桥 enp37s0-ovs 中应包含:

  • 物理口:enp37s0(WAN)、enp38s0(电脑)
  • internal 口:enp37s0-ovs

2. 清理物理接口 IP

BASH
sudo ip addr flush dev enp37s0
sudo ip addr flush dev enp38s0

3. 让 internal 口继承物理 WAN 的 MAC

BASH
sudo ovs-vsctl set bridge enp37s0-ovs other-config:hwaddr=$(cat /sys/class/net/enp37s0/address)

4. 给 internal 口获取 DHCP 地址

BASH
sudo dhclient enp37s0-ovs

附:直接使用 ip 命令创建

这种方法不需要修改任何配置文件,立即生效,但重启系统后会消失。适合快速测试。

  1. 创建网桥设备
BASH
sudo ip link add name br0 type bridge
  1. 将物理网卡加入网桥
BASH
sudo ip link set dev eth0 master br0
# 清除原配置
sudo ip addr flush dev eth0
  1. 启动网桥和物理网卡
BASH
sudo ip link set dev eth0 up
sudo ip link set dev br0 up
  1. 配置 IP 地址 你需要给网桥分配 IP,而不是给物理网卡分配。
BASH
# 临时分配一个 IP 测试连通性
sudo ip addr add 192.168.1.100/24 dev br0

或者使用 DHCP 获取 IP:

BASH
sudo dhclient br0

: Cheyne Xie

: https://chaim.eu.org/posts/376035b9/

: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.