(六)Armbian双网卡启动Docker下Openwrt的方法 - ch0769/luyou GitHub Wiki

  1. 环境假设 后面的操作全部以此设定为准,务必理解清楚,自行替换相应的ip地址 a. 主路由的LAN口IP地址为192.168.1.1, 可以是路由器也可以是光猫 b. 假定Armbian已识别双网卡,网卡名分别是eth0(主网卡)及eth1(第二块网卡) c. armbian eth1 配置成wan口网段, IP是192.168.1.10 -> docker 绑定eth1 创建 macnet_wan网络 d. armbian eth0 配置成lan口网段, IP是192.168.2.10 -> docker 绑定eth0 创建 macnet_lan网络 e. docker里的openwrt, wan口ip是192.168.1.20(当上级是路由器时), 或直接pppoe拨号(当上级是光猫时) f. docker里的openwrt, lan口ip是 192.168.2.20 ***** 配置成功后,所有电脑都的网关都指向这个ip g. 操作系统是Armbian 的 debian 9 或 debian10,不是ubuntu h. 在双网卡模式下, armbian仅是docker的宿主机,自身可能上不了网(当上级是光猫时)

  2. armbian网卡设置 eth0(lan),应设置静态ip, 编辑/etc/network/interfaces.d/eth0 如果上级是路由器,则可以访问外网 如果上级路由是光猫,则armbian应该不能访问外网(因为openwrt才是主角) eth0 静态ip设置方法 auto eth0 iface eth0 inet static up ip link set $IFACE promisc on address 192.168.2.10
    broadcast 192.168.2.255 netmask 255.255.255.0

eth1(wan),同样编辑/etc/network/interfaces.d/eth1, 注: 在贝壳云的armbian里,ax88179网卡的设备名不是eth1,而是enxNNNNNNNNNNNN 这里的NNNNNNNNNNNN 是该网卡的mac地址,插入网卡后用ifconfig命令可以查到,比如: enx00909e9d4a0d: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether 00:90:9e:9d:4a:0d txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

因此需要把下文中的 *** 所有的 *** eth1 替换为enx00909e9d4a0d(包括文件名也要换) 如果上级是路由器,则可以设置静态ip 192.168.1.10,如果上级是光猫,则设为dhcp 静态ip的设置方法:

eth1 dhcp的设置方法(上级是光猫): allow-hotplug eth1 iface eth1 inet dhcp up ip link set $IFACE promisc on

eth1 静态IP的设置方法(上级是路由器): allow-hotplug eth1 iface eth1 inet static up ip link set $IFACE promisc on address 192.168.1.10 broadcast 192.168.1.255 netmask 255.255.255.0 gateway 192.168.1.1 nameserver 192.168.1.1

  1. 制作openwrt镜像(或导入已做好的镜像,参见前面的文章) 本例所用的镜像为 openwrt-arm64:r9.8.17

  2. 运行镜像 示例:

创建macvlan网络,名为macnet_lan

docker network create -d macvlan --subnet=192.168.2.0/24 -o parent=eth0 macnet_lan

创建macvlan网络,名为macnet_wan

docker network create -d macvlan --subnet=192.168.1.0/24 -o parent=eth1 macnet_wan

用macnet_lan创建openwrt容器,容器名为phicomm-n1, (或者beikeyun,名字随意取)

引用armbian的通用函数包

source /usr/lib/armbian/armbian-common

得到一个随机MAC地址,存入MACADDR变量

get_random_mac

docker create --name phicomm-n1
--restart always
--network macnet_lan
--mac-address $MACADDR
--privileged=true
--ulimit nofile=16384:65536
openwrt-arm64:r9.8.17

把 macnet_wan网络添加到phicomm-n1容器里

docker network connect macnet_wan phicomm-n1

启动容器

docker start phicomm-n1

进入op容器,修改/etc/config/network

docker exec -it phicomm-n1 sh vi /etc/config/network

修改下面这段: config interface 'lan' option ifname 'eth0' option proto 'static' option netmask '255.255.255.0' option ipaddr '192.168.2.20'

改好后,存盘

然后再修改/etc/rc.local,在最后一行之前的任意位置, 加入以下几行:(非常重要) 注意: EOF之后不能有空格

cat > /etc/resolv.conf <<EOF search lan nameserver 127.0.0.1 options ndots:0 EOF

存盘,运行: /etc/init.d/network restart 过一会就可以ping通openwrt的lan口了,然后用浏览器连上192.168.2.20就可以按一般的操作了

补充1:双网卡模式下,如果不通顺利上网,可以在防火墙自定义规则里添加一行: iptables -t nat -I POSTROUTING -o eth1 -j MASQUERADE

补充2: 在openwrt里,lan口的桥接最好删掉

补充3: 双网卡模式的openwrt配置好以后,可能要重启才生效,多试几次就通了