场景

  • 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
点击展开查看更多

版权声明

作者: 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.

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键