【飞牛】飞牛配置macvlan,为容器创建独立ip

背景

在Docker容器中,或者在家庭NAS中,很多情况下对于Docker容器都需要有独立的IP,方便来做一些网络的分流,也能更好的去记录和反向代理

创建MacVlan网络

docker network create -d macvlan --subnet=192.168.0.0/16 --gateway=192.168.0.1 -o parent=enp3s0-ovs macvlan
  • enp3s0-ovs 网卡ID

创建成功提示

创建容器,这里以 qb 为例

version: "3"
services:
  qbittorrent:
    image: linuxserver/qbittorrent
    container_name: qbittorrent
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
      - WEBUI_PORT=8080
    volumes:
      - ./config:/config
      - /vol2/1000/影视存储/downloads:/downloads
    ports:
      - "8080:8080"
      - "6881:6881"
      - "6881:6881/udp"
    restart: unless-stopped
    networks:
      macvlan:
        ipv4_address: 192.168.220.100

networks:
  macvlan:
    external: true

这里的:192.168.220.100 就是你自己需要固定的IP地址

这时候其实你已经可以从你局域网里面访问到你固定IP地址的服务了,但是这时候你会发现,你的容器之间是没办法互访的。比如我的lucky也是搭建在一起,那么反向代理的时候,是访问不到192.168.220.100的。因为macvlan距离隔离性。

允许容器互访

  • 通过虚拟网桥来实现与宿主机之间的互通,并且要设置开机自启。

通过SSH链接到飞牛,并且进入到root账户下

ssh xxx@飞牛的IP地址
sudo -i // 进入root账户

设置基础网络配置文件

/usr/local/bin/setup_network.sh脚本文件

#!/bin/bash

# 创建 macvlan 网卡,vlan_bridge可自定义
ip link add vlan_bridge link enp3s0-ovs type macvlan mode bridge

# 配置 IP 地址,手动填一个子网中未用过的 IP
ip addr add 192.168.220.1 dev vlan_bridge

# 启动 macvlan 网卡
ip link set vlan_bridge up

# 添加路由,目标 Docker 的 IP
ip route add 192.168.220.0/24 dev vlan_bridge
  • 192.168.220.0/24: 是我的虚拟机使用的IP断,你可以改成你自己的规划
  • 192.168.220.1: 是一个子网中不使用的IP地址,也是作为通讯的网关
  • vlan_bridge: 名称自己随便定义
  • enp3s0-ovs: 网卡接口ID,和上面的一致

脚本赋权,同时新增重启自动新增

chmod +x /usr/local/bin/setup_network.sh

新增开机启动Service文件

/etc/systemd/system/setup-network.service

[Unit]
Description=Setup Network for macvlan
After=network.target

[Service]
ExecStart=/usr/local/bin/setup_network.sh
Type=oneshot
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

启动

systemctl daemon-reload
systemctl enable setup-network.service

自启动

将以下内容复制到/etc/rc.local如图所示

202506120901849.png

(sleep 60 && service setup-network restart ) &

重启

这时候重启机器,应该就已经可以使用了

标签: macvlan, 飞牛, nas

💬 1 条评论

  1. 最新脚本代码,延迟启动,否则有可能会系统覆盖,导致失效
    ```
    #!/bin/bash
    # 创建 macvlan 网卡,vlan_bridge可自定义
    ip link add vlan_bridge link enp3s0-ovs type macvlan mode bridge
    # 配置 IP 地址,手动填一个子网中未用过的 IP
    ip addr add 192.168.220.1 dev vlan_bridge

    # 延迟10秒启动 macvlan 网卡和添加路由,但不阻塞当前脚本
    (
    sleep 10
    # 启动 macvlan 网卡
    ip link set vlan_bridge up
    # 添加路由,目标 Docker 的 IP
    ip route add 192.168.220.0/24 dev vlan_bridge
    ) &

    # 脚本继续执行或结束,此时macvlan 网卡启动会被延迟,但脚本不阻塞
    ```

✍️ 发表评论