这篇文章上次修改于 706 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

1、起因

因最近树莓派疯狂涨价,经群友推荐,把发霉派闲鱼出掉了,换了一台n5105的软路由,因此开始折腾起routeros和openwrt,记录下折腾完的配置

2、折腾

软路由配置为N5105 4G 120G,后面又加了4G内存,升级到8G

PVE安装

  • 先安装proxmox 作为基础环境 pve下载地址
  • 通过rufus写入u盘
  • 插到软路由主机上,配置从U盘启动
  • 按照指导一步一步完成安装

去除pve登录时无有效订阅的提示

修改文件/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

找到:title: gettext(‘No valid subscription’)

if (res === null || res === undefined || !res || res
.data.status.toLowerCase() !== ‘active’) {

改为

if(false) 

即可

删除订阅源及更换国内源

更换pve源

mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak
sed -i 's|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g' /etc/apt/sources.list
sed -i 's|^deb http://security.debian.org|deb https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list
source /etc/os-release
echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve $VERSION_CODENAME pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
apt update

更换ct源

cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back
sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
systemctl restart pvedaemon.service

更换ceph源

cp /usr/share/perl5/PVE/CLI/pveceph.pm /usr/share/perl5/PVE/CLI/pveceph.pm_back
sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/CLI/pveceph.pm
systemctl restart pvedaemon.service

PVE网络配置:

网卡直通

vim /etc/default/grub

找到

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

修改为

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

然后

update-grub
reboot

增加模块

vim /etc/modules

增加

vfio
   vfio_iommu_type1
   vfio_pci
   vfio_virqfd

查找网卡ID:

lspci |grep net

直通配置:

软路由上一共有4个网口,管理口网卡pve并未识别到,懒得管了

我配置了3张网卡直通到routeros虚拟机里

一张网卡配置桥接网卡vmbr0,设置静态ip地址,通过pve添加到routeros里

防止routeros挂掉后没有办法接入pve进行操作

RouterOS准备

选择CLoud Hosted Router,我选择的时7.8stable版本,选择Raw disk image那一行,下载

然后上传到pve里,记下上传的路径,我的路径为

/var/lib/vz/template/iso/chr-7.8.img
  • 创建虚拟机

选择创建虚拟机 → 操作系统选择不使用任何介质 → 系统默认 → 磁盘选1G,后面要删掉 → CPU类别选择host → 内存我给了2G → 网络只选择桥接的vmbr0 → 最后确认

选择新创建的虚拟机 假设id为100

点击硬件,点击刚才的硬盘,点击分离,点击移除,删除磁盘

点击proxmox进入shell选单,执行命令

qm importdisk 100 /var/lib/vz/template/iso/chr-7.8.img  local-lvm

将chr-7.8.img 导入到新的虚拟机里:

再次点击新创建的虚拟机,选择硬件,点击未使用的磁盘0,点击编辑,编辑确定,将硬盘导入

添加网卡直通,lspci |grep net查看网卡id

root@proxmox:~# lspci |grep net
02:00.0 Ethernet controller: Intel Corporation Device 125c (rev 04)
03:00.0 Ethernet controller: Intel Corporation Device 125c (rev 04)
04:00.0 Ethernet controller: Intel Corporation Device 125c (rev 04)
05:00.0 Ethernet controller: Intel Corporation Device 125c (rev 04)
root@proxmox:~# 

点击添加pci设备,根据网卡id选择对应的pci设备

再点击选项,配置引导顺序,将刚加入的磁盘移动到第一位,点击确定

然后启动虚拟机

RouterOS配置

刚装好的routeros默认用户名:admin 默认密码:空

查看网络接口,设置ip地址

/interface/print
 0 R  ether1         ether            1500         
 1 RS ether2         ether            1500         
 2 RS ether3         ether            1500         
 3 RS ether4         ether            1500      
/ip/address/add
10.88.89.1
ether1

配置好后就可以通过winbox连接routeros了,下载winbox

禁止不必要服务

我只保留了www网络和8291 winbox端口,另外还可以限制address到内网,禁止公网访问

 /ip/service/print
Flags: X, I - INVALID
Columns: NAME, PORT, ADDRESS, CERTIFICATE, VRF
#   NAME      PORT  ADDRESS        CERTIFICATE  VRF 
0 X telnet      23                              main
1 X ftp         21                                  
2   www         80                              main                  
3 X ssh      53332                              main
4 X www-ssl    443                 none         main
5 X api       8728                              main
6   winbox    8291                              main                  
7 X api-ssl   8729                 none         main

配置防火墙

/ip firewall filter
add action=accept chain=input comment="allow established" connection-state=established,related,untracked in-interface-list=WAN
add action=accept chain=input comment="allow lan input" in-interface-list=LAN
add action=drop chain=input comment="drop all" in-interface-list=WAN
/ip firewall nat
add action=masquerade chain=srcnat out-interface-list=WAN

配置上网

/interface pppoe-client
add add-default-route=yes disabled=no interface=ether1 name=pppoe-out1 use-peer-dns=yes user=xxxxxx

配置接口list

/interface list
add name=WAN
add name=LAN
/interface list member
add interface=pppoe-out1 list=WAN
add interface=bridge1 list=LAN

配置DNS,导入证书

/tool fetch url="https://secure.globalsign.net/cacert/Root-R5.crt"

/ip dns
set allow-remote-requests=yes servers=223.5.5.5 use-doh-server=https://223.5.5.5/dns-query verify-doh-cert=yes

配置桥接

/interface bridge
add name=bridge1
/interface bridge port
add bridge=bridge1 interface=ether2
add bridge=bridge1 interface=ether3
add bridge=bridge1 interface=ether4

配置DHCP

/ip dhcp-server
add address-pool=dhcp interface=bridge1 name=dhcp1
/ip dhcp-server network
add address=10.88.89.0/24 dns-server=10.88.89.1 gateway=10.88.89.1 netmask=24

打电话找电信要公网ip,并将光猫改成桥接,将光猫网线插入ether1中

配置DDNS

RID查询:

 curl -X GET "https://api.cloudflare.com/client/v4/zones/[zoneid]/dns_records?name=[域名]" -H "X-Auth-Email:[email]" -H "X-Auth-Key:[apikey]" -H "Content-Type: application/json"|jq .

cloudflare托管域名配置ddns脚本:

{
    :local WANInterface "pppoe-out1"
    :local DDNSDomain "ddns域名"

    :local APIToken "token"

    :local ZoneID "zoneid"
    :local RID "rid"

    :local ResolvedIP [:resolve $DDNSDomain]
    :local LocalIP [/ip address get [find interface=$WANInterface] address]
    :set LocalIP [:pick $LocalIP 0 [:find $LocalIP "/"]]
    :set LocalIP [:toip $LocalIP]
    :log info "[DDNS] DDNS=$ResolvedIP Local=$LocalIP"
    :if ($ResolvedIP != $LocalIP) do={
        /tool fetch http-method=put mode=https url="https://api.cloudflare.com/client/v4/zones/$ZoneID/dns_records/$RID" http-header-field="Authorization: Bearer $APIToken,content-type:application/json" http-data="{\"type\":\"A\",\"name\":\"$DDNSDomain\",\"ttl\":\"60\",\"content\":\"$LocalIP\"}" output=none
        :delay 2
        /ip dns cache flush;
        :log info "[DDNS] Done."
    }
}

将电信送的路由器tp-link改成桥模式,插入剩下的网口之一,然后剩下的一个口再插个交换机,接入电脑等有线设备,即可大功告成

3、其他

一开始我将4个网口全部桥接,然后通过pve虚拟化到ros中,再在ros里配置了网卡桥接,再通过桥接网卡连接电信,然后配置防火墙等,不知道是哪一步操作出了问题,导致无法上网,dhcp也失败,家里直接断网,紧急恢复为tplink做主路由,然后彻底删除该ros,重新折腾一次,采用3直通方案,目前还很稳定,暂时没有出问题

之后如果有问题再记录

另外还有wireguard和BGP的配置,不过没有什么记录的必要