## 背景 在Docker容器中,或者在家庭NAS中,很多情况下对于Docker容器都需要有独立的IP,方便来做一些网络的分流,也能更好的去记录和反向代理 ## 创建MacVlan网络 ```shell 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 为例 ```yaml 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账户下 ```shell ssh xxx@飞牛的IP地址 sudo -i // 进入root账户 ```  ### 设置基础网络配置文件 `/usr/local/bin/setup_network.sh`脚本文件 ```shell #!/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,和上面的一致 ### 脚本赋权,同时新增重启自动新增 ```shell chmod +x /usr/local/bin/setup_network.sh ``` #### 新增开机启动Service文件 `/etc/systemd/system/setup-network.service` ```shell [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 ``` #### 启动 ```shell systemctl daemon-reload systemctl enable setup-network.service ``` ### 重启 这时候重启机器,应该就已经可以使用了   Loading... ## 背景 在Docker容器中,或者在家庭NAS中,很多情况下对于Docker容器都需要有独立的IP,方便来做一些网络的分流,也能更好的去记录和反向代理 ## 创建MacVlan网络 ```shell 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 为例 ```yaml 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账户下 ```shell ssh xxx@飞牛的IP地址 sudo -i // 进入root账户 ```  ### 设置基础网络配置文件 `/usr/local/bin/setup_network.sh`脚本文件 ```shell #!/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,和上面的一致 ### 脚本赋权,同时新增重启自动新增 ```shell chmod +x /usr/local/bin/setup_network.sh ``` #### 新增开机启动Service文件 `/etc/systemd/system/setup-network.service` ```shell [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 ``` #### 启动 ```shell systemctl daemon-reload systemctl enable setup-network.service ``` ### 重启 这时候重启机器,应该就已经可以使用了   最后修改:2025 年 04 月 16 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏