软路由相对于硬路由性能较强,
幸运的是,在之前就购入了几台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
gateway 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)
此时你的软路由已配置完成。
了解 Starx's Home 的更多信息
订阅后即可通过电子邮件收到最新文章。