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

幸运的是,在之前就购入了几台N1,从而可以进行折腾。

本教程结合之前恩山论坛的教程进行修改创作,

再次感谢原教程贴的作者们。

设备需求:

  • N1
  • 千兆交换机

先将N1与电脑插入路由器以便进行配置。

Step1:

安装Docker

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh --mirror AliyunCode language: JavaScript (javascript)

Step2:

利用Docker创建虚拟内网

docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=eth0 macnetCode 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.2Code 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_carsonCode 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
exitCode 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:eth0Code 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.1Code language: CSS (css)

正常来说现在已经能打开Openrt的管理页面了

#替换本地启动脚本为以下
ip link add link eth0 name veth0 type macvlan
ifconfig veth0 up
exit 0Code language: PHP (php)

配置PPPOE拨号上网

使用刚才Docker内网的桥接口进行配置

  • 点击添加新接口并依次输入或选择以下字符
  • wan
  • PPPOE
  • veth0

返回接口界面

编辑wan的参数,使用PPPOE拨号。(自行配置)

配置NAT转发

#替换为以下
iptables -t nat -I POSTROUTING -o pppoe-wan -j MASQUERADECode 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
#重启
rebootCode language: PHP (php)

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


了解 Starx's Home 的更多信息

订阅后即可通过电子邮件收到最新文章。

分类: Ubuntu