源地址:https://github.com/lisaac/openwrt-in-docker
由于 docker
网络采用 macvlan
的 bridge
模式,即使宿主机与容器在同一网段,相互之间也是无法通信的。 为了解决这个问题,需利用多个 macvlan
接口之间是互通的原理,在 LAN
口新建一个 macvlan
虚拟接口:
# 使用 ip 命令
ip link add link enp3s0 mac30 type macvlan mode bridge # 在 enp3s0 接口下添加一个 macvlan 虚拟接口
ip addr add 10.1.1.2/24 brd + dev mac30 # 为 mac30 分配 ip 地址
ip link set mac30 up
ip route del default #删除默认路由
ip route add default via 10.1.1.254 dev mac30 # 设置静态路由
echo "nameserver 10.1.1.1" > /etc/resolv.conf # 设置静态 dns 服务器
# 或者使用 nmcli
nmcli connection add type macvlan dev enp3s0 mode bridge ifname mac30 autoconnect yes save yes
或者,若是在 debian 中可以编辑 /etc/network/interface
并加入:
auto mac30
iface mac30 inet manual
pre-up ip link add link enp3s0 mac30 type macvlan mode bridge
pre-up ip addr add 10.1.1.250/24 brd + dev mac30
up ip link set mac30 up
post-up ip route del default
post-up ip route del 10.1.1.0/24 dev enp3s0
post-up ip route add default via 10.1.1.1 dev mac30
post-down ip link del dev mac30
下面这段是我的机子的设置
ip link add link enp2s0 macop type macvlan mode bridge
ip addr add 192.168.101.101/24 brd + dev macop
ip link set macop up
ip route del default
ip route add default via 192.168.101.100 dev macop
#下面这条可以不用
echo "nameserver 192.168.101.100" > /etc/resolv.conf
#删除
ip link set macop down
还有一点需要注意的是,重启后自己创建的macvlan接口会消失,我的方法是把上述命令都写到了rc.local内。