软路由相对于硬路由性能较强,

幸运的是,在之前就购入了几台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)

返回结果

root@aml:~# 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分配

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)

此时你的软路由已配置完成。

分类: Ubuntu

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

    1. 设置mac0与eth0桥接
    2. eth0设置为手动
    3. 关闭networkmanager对eth0的管理

发表评论

Avatar placeholder

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据