背景
最近需要用Docker版的Openwrt作為旁路由(網(wǎng)關(guān)),在配置過程中遇到一些問題,通過查閱資料,最終完美解決?,F(xiàn)在將整體方案和具體操作步驟貼到這里分享給大家
環(huán)境
這里我使用的環(huán)境如下:
- 宿主機操作系統(tǒng):Armbian
- 宿主機ip:192.168.5.2
- 宿主機新macvlan接口ip:192.168.5.3
- Docker鏡像:unifreq/openwrt-aarch64
- Docker ip(macvlan):192.168.5.10
- 網(wǎng)段:192.168.5.0/24
- 主路由ip:192.168.5.1
操作步驟
Docker安裝OpenWrt
這里我使用docker macvlan
的bridge
網(wǎng)絡模式提升性能
確認宿主機網(wǎng)絡接口名
ifconfig
以我的返回為例,這里是eth0
eth0: flags=4419<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.5.2 netmask 255.255.255.0 broadcast 192.168.5.255
inet6 xxxxxxxxxxx prefixlen 64 scopeid 0x20<link>
ether d2:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 10762458 bytes 10675054731 (10.6 GB)
RX errors 0 dropped 164956 overruns 0 frame 0
TX packets 6366329 bytes 10052966588 (10.0 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 65
創(chuàng)建macvlan網(wǎng)絡
開啟橋接網(wǎng)卡的混淆模式
在宿主機輸入下面命令
ip link set eth0 promisc on
再一次ifconfig
接口名查看是否成功開啟。如果對應接口有PROMISC
證明已成功開啟
eth0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1500
inet 192.168.5.2 netmask 255.255.255.0 broadcast 192.168.5.255
inet6 xxxxxxxxxxx prefixlen 64 scopeid 0x20<link>
ether d2:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 10762458 bytes 10675054731 (10.6 GB)
RX errors 0 dropped 164956 overruns 0 frame 0
TX packets 6366329 bytes 10052966588 (10.0 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 65
為docker創(chuàng)建macvlan網(wǎng)絡
docker network create -d macvlan --subnet=192.168.5.0/24 --gateway=192.168.5.1 -o parent=eth0 macnet
創(chuàng)建OpenWrt容器
在宿主機執(zhí)行
docker run --restart always --name openwrt -d --network macnet --privileged unifreq/openwrt-aarch64:latest /sbin/init
登錄容器更改ip網(wǎng)段
宿主機執(zhí)行下面命令進入容器終端
docker exec -it openwrt bash
在容器終端下,修改/etc/config/network
文件,修改ipaddr
為宿主機網(wǎng)段,并增加gateway
和dns
配置,指向主路由地址,配置如下:
config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option ipaddr '192.168.5.10'
option dns '192.168.5.1'
option gateway '192.168.5.1'
option netmask '255.255.255.0'
重啟network生效配置
容器下執(zhí)行,
/etc/init.d/network restart
然后ifconfig
相應的接口名,看配置是否生效,并測試是否可以訪問互聯(lián)網(wǎng)
ping -c 3 baidu.com
與宿主機網(wǎng)絡互通
在用上述配置創(chuàng)建完OpenWrt docker后,雖然宿主機和容器在同一網(wǎng)段,但是因為macvlan
模式的限制,宿主機與容器是無法互相通信的(但與同網(wǎng)段下的其他機器是可以相互通信的),所以需要在宿主機創(chuàng)建一個新的macvlan
接口,然后增加一條宿主機macvlan
訪問容器macvlan
的靜態(tài)路由。
在宿主機終端執(zhí)行下面代碼,
注:macvlan-proxy
這個接口名稱可以隨便起,只需要每條命令的名字保持一致即可
宿主機創(chuàng)建新的macvlan接口
ip link add macvlan-proxy link eth0 type macvlan mode bridge
為新接口分配ip并啟用
ip addr add 192.168.5.3 dev macvlan-proxy
ip link set macvlan-proxy up
添加靜態(tài)路由使宿主機與容器使用新接口通信
ip route add 192.168.5.10 dev macvlan-proxy
配置新接口的默認網(wǎng)關(guān)為容器地址
route add default gw 192.168.5.10 macvlan-proxy
測試是否能ping通
在宿主機執(zhí)行,
# 宿主機-->OpenWrt容器
ping 192.168.5.10 -c 3
# OpenWrt容器-->宿主機
docker exec -it openwrt bash -c "ping 192.168.5.3 -c 3"
如果可以相互ping通,則證明設置沒問題。
加入啟動項自啟動
上述命令會在宿主機重啟后失效,為了每次重啟宿主機均可自動運行上述命令,需要編輯/etc/rc.local
文件,將上面的命令粘貼到exit 0
之前
ip link set eth0 promisc on > /dev/null 2>&1
ip link add macvlan-proxy link eth0 type macvlan mode bridge
ip addr add 192.168.5.3 dev macvlan-proxy
ip link set macvlan-proxy up
ip route add 192.168.5.10 dev macvlan-proxy
route add default gw 192.168.5.10 macvlan-proxy
最后,確保為/etc/rc.local
文件增加了可執(zhí)行權(quán)限且rc-local.service
是自啟動的狀態(tài)
chmod a+x /etc/rc.local
systemctl enable rc-local
至此,Docker OpenWrt與宿主機網(wǎng)絡互通配置已完成,可重啟后驗證是否生效。
備注
本文只介紹了如何配置Docker OpenWrt與宿主機網(wǎng)絡互通,以及如何作為宿主機網(wǎng)關(guān),至于OpenWrt如何配置作為旁路由(網(wǎng)關(guān)),還需要其他的設置,詳見此文章。文章來源:http://www.zghlxwxcb.cn/news/detail-773373.html
參考資料1
參考資料2
參考資料3文章來源地址http://www.zghlxwxcb.cn/news/detail-773373.html
到了這里,關(guān)于配置Docker OpenWrt與宿主機網(wǎng)絡互通且作為宿主機網(wǎng)關(guān)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!