软路由相对于硬路由性能较强,
幸运的是,在之前就购入了几台N1,从而可以进行折腾。
本教程结合之前恩山论坛的教程进行修改创作,
再次感谢原教程贴的作者们。
设备需求:
- N1
- 千兆交换机
先将N1与电脑插入路由器以便进行配置。
Step1:
安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
Code language: JavaScript (javascript)
Step2:
利用Docker创建虚拟内网
docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=eth0 macnet
Code language: PHP (php)
Step3:
导入Openwrt官方armvirt_rootfs
docker import https://downloads.openwrt.org/releases/18.06.2/targets/armvirt/64/openwrt-18.06.2-armvirt-64-default-rootfs.tar.gz openwrt:18.06.2
Code language: JavaScript (javascript)
Step4:
使用刚才创建的虚拟内网并运行(启动自启)
docker run --restart always -d --network macnet --privileged openwrt:18.06.2 /sbin/init
Step5:
进入容器内部的命令行界面,修改网络信息
docker ps
#获取正在运行的容器
Code language: PHP (php)
返回结果
[email protected]:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1127b876da76 portainer/portainer:linux-arm64 "/portainer" 11 days ago Up 30 minutes 0.0.0.0:9000->9000/tcp keen_lederberg
1fcc16550c73 openwrt:18.06.2 "/sbin/init" 11 days ago Up 30 minutes vigilant_carson
Code language: PHP (php)
记录IMAGE为openwrt:18.06.2那行的CONTAINER ID (1fcc16550c73)
启动命令行
docker exec -it 1fcc16550c73 sh
修改网络配置文件
vi /etc/config/network
返回结果
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config globals 'globals'
option ula_prefix 'fd75:806a:fa6a::/48'
config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option ipaddr '192.168.31.1'
option netmask '255.255.255.0'
option ip6assign '60'
Code language: JavaScript (javascript)
将 “option ipaddr” 改成你们现在的Docker内网需要的网关地址。
(vi进入显示界面以后,键盘切换到英文输入,输入i开始编辑,按下Esc键后并依次输入:wq并回车保存后启动Docker內部桥接退出)
ip link add link eth0 name veth0 type macvlan
ifconfig veth0 up
iptables -t nat -I POSTROUTING -o pppoe-wan -j MASQUERADE
exit
Code language: PHP (php)
Step6:
建立与宿主的Docker内网通信(修改/etc/network/interfaces文件)
#上面介绍了简单的vi用法所以不再重复
echo "
#Router
auto mac0
iface mac0 inet static
address 192.168.31.2
netmask 255.255.255.0
gayway 192.168.31.1
dns-nameservers 192.168.31.1
pre-up ip link add mac0 link eth0 type macvlan mode bridge
post-down ip link del mac0 link eth0 type macvlan mode bridge
" >> /etc/network/interfaces
#以上命令将建立与eth0的桥接并在Docker内网中使用192.168.31.2
vi /etc/network/interfaces
#更改eth0配置(iface eth0 inet dhcp)->(iface eth0 inet manual)
vi /etc/NetworkManager/NetworkManager.conf
#在以下键值内添加eth0
#[keyfile]
#unmanaged-devices=interface-name:wlan0
#->
#[keyfile]
#unmanaged-devices=interface-name:wlan0;interface-name:eth0
Code language: PHP (php)
Step7:
断开N1、PC、光猫输出的广域网网线(路由器wan口接的网线)与路由器的连接,接上交换机。
正常的话电脑会通过N1获取到IP地址
cmd->
ping 192.168.31.1
正在 Ping 192.168.31.1 具有 32 字节的数据:
来自 192.168.31.1 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.31.1 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.31.1 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.31.1 的回复: 字节=32 时间<1ms TTL=64
192.168.31.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
更改SSH的地址为你刚才配置的宿主的内网地址
ssh root@192.168.31.1
Code language: CSS (css)
正常来说现在已经能打开Openrt的管理页面了
#替换本地启动脚本为以下
ip link add link eth0 name veth0 type macvlan
ifconfig veth0 up
exit 0
Code language: PHP (php)
配置PPPOE拨号上网
使用刚才Docker内网的桥接口进行配置
- 点击添加新接口并依次输入或选择以下字符
- wan
- PPPOE
- veth0
返回接口界面
编辑wan的参数,使用PPPOE拨号。(自行配置)
配置NAT转发
#替换为以下
iptables -t nat -I POSTROUTING -o pppoe-wan -j MASQUERADE
Code language: PHP (php)
Final Step:
若光猫自带DHCP服务器,请关闭。(重要)
启用强制DHCP分配
- 浏览器打开 https://192.168.31.1/cgi-bin/luci/admin/network/network/lan
- DHCP服务器配置-高级设置-强制
SSH到Openwrt的宿主上
#替换/etc/rc.local内容
echo "
modprobe pppoe
route add default gw 192.168.31.1
exit 0
" > /etc/rc.local
#重启
reboot
Code language: PHP (php)
此时你的软路由已配置完成。
19 条评论
老王 · 2019年6月14日 下午7:42
教程很好,真不错,请问你这个网站也是N1做的吗?通过什么方式?是armbian装宝塔吗?端口怎么隐藏的呢?
Starx · 2019年6月23日 下午10:54
是的,是N1做的。全部环境手动配置的。
Victor Huang · 2019年7月27日 下午4:28
用这种方法是把广域网线接到交换机上,然后再把交换机和 N1 相连吗?对 MacVLAN 不太熟悉,这样会不会扩大了广播域啊?
soulfist · 2019年8月3日 下午2:06
很好的教程,感谢大大分享!
Aixtuz · 2021年3月19日 上午2:01
请问 Step6 中的 (iface eth0 inet dhcp)->(iface eth0 inet manual) 这段是要修改哪里呢?上面/etc/network/interfaces文件中没有和它一样的内容,只有近似的 iface mac0 inet static
。
Starx · 2021年3月22日 上午11:07
你好,关于eth0是假设当前你的系统默认网卡名为其,若不一致可替换为相关的网卡名。
Anthony · 2021年8月20日 下午7:41
你好,感谢你的教程,我已经成功刷入armbian,并且在上面装入docker,也运行上了OP. 联网都正常,外接一个红米路由器,都没问题。 唯独就是armbian这个宿主机没有任何网络,不知道你上面的Step 6 是怎么配的。能麻烦您说清楚一点吗?感谢!!
Starx · 2021年9月1日 下午2:32
你好,尝试在最后一步添加默认路由即可。
linnnnn · 2021年11月20日 下午8:25
我是在arch中用docker装op,请教一下arch无法通过op上网的问题怎么解决?
Starx · 2021年12月16日 下午4:14
看一下路由表和iptables nat配置
wangl13579 · 2021年12月18日 下午11:22
请问在coreelec的docker安装openwrt ,怎么进行step 6?显示没有/etc/network/interfaces这个文件
Starx · 2021年12月26日 下午7:01
你进到容器的终端了吗?
犬神夜叉 · 2021年12月21日 上午8:31
armbian和coreelec系统想部署成主路由,怎么部署?
Starx · 2021年12月26日 下午7:00
armbian可以直接部署,coreelec需要docker。
Leon · 2022年1月1日 下午4:36
你好,我最近也在折腾这个,想用docker做软路由,但是我有一些不太明白?软路由不应该有两个口,一个lan,一个wan吗?为什么你们的教程都没有wan口?
我目前的设备是:J3455自带一个千兆网卡外加一个USB千兆网卡,想要其中一个网卡接光猫,另外一个口接一个AP。 不明白该怎么配置,能指点一下吗 谢谢!
Starx · 2022年1月18日 下午6:45
因为N1只有一个网口,需要配置单臂路由。双网口就不需要设置bridge了。
胡 · 2022年1月22日 下午9:05
我也是和他一样的情况,n3150想装个omv用docker跑opnewrt做软路由用某些功能,但是我主路由网段是1.x,这个openwrt想让他跑在2.x上,并且我主机上还有一个pcie扩展双网口的卡,想让openwrt接管这两个网口 一个做wan连接主路由做公网接入,另外一个接路由器lan tolan 做ap给手机笔记本用。这个方案看您的教程还是有点迷糊。我这种情况应该咋弄啊
zfj · 2022年1月17日 下午9:46
教程很棒。就是Step6 真的没看懂。
如果我的网卡名是eth0 openwrt地址也是192.168.31.1
请问/etc/network/interface最后修改是什么内容?
/etc/NetworkManager/NetworkManager.conf 最后后是什么内容?
Starx · 2022年1月18日 下午6:48