本笔记旨在记录本人在 IT基础设施工程-全栈开发 工作中遇到的一些业务及实现方式
本教程是为了实现企业级网络重构与异地组网。内容包含物理设备,esxi虚拟化,ikuai部署配置,linux部署配置,wireguard配置,python自动化监控程序
不过本教程是大致记录,必然有细节缺失,有想法的网友可以在评论区进行讨论
介绍:基于x99平台的设备,多核心能力强劲,可用于虚拟化和多开等,对于企业要求的软路由能力完全充足
要求:最好6网口及以上,用于多线路宽带负载均衡,也可下联多台交换机
本业务实际配置:
CPU:e5 2650 v4
网卡:6个40G光口网卡(3张物理网卡)及4个2.5G口板载网卡
做好一个ventoy启动盘,放入esxi系统
在软路由机器中进入bios选择外部设备优先启动
启动进入ventoy界面,选择esxi按步骤进行安装
进入esxi,首先需要修改管理口并绑定一条上行链路,为其设置静态ip,将终端使用网线接入该管理口,修改终端的ip段与esxi处于同一局域网,然后访问esxi管理口ip即可访问web页面
进入esxi web页面后需要上传iso,在datastore中选择数据存储浏览器,新建目录,上传iso(ikuai与ubuntu),作为安装虚拟机的镜像
虚拟机创建,一定要勾选不启用uefi引导(否则无法安装系统),内存要勾选预留,cpu数量是逻辑数,而非物理数
选择创建虚拟机,选择对应的操作系统(ikuai选linux 5.x,ubuntu选ubuntu 64位,centos选对应的版本)
存储跳过
系统配置
cpu核心是逻辑占用,而非物理占用(分时复用),不要太高(调度问题),不要太低(性能低)
内存合适就好,要给esxi留足4g的空间,可以选择预分配,直接占用。
选择好之后即可创建并安装
这里选择将所有网口全部直通给ikuai,避免虚拟机的损耗,以获得接近物理硬件的性能提升
在管理-硬件中找到指定网络设备,勾选并切换为直通模式
在ikuai虚拟机中设备配置选择,选择添加PCI设备,网卡将被添加到虚拟机中
首先是选定一个eth绑定lan,配置ip网段,用终端进行连接并访问web页面
然后在ikuai中进行wan,lan分配,dhcp配置,端口映射,DDNS配置,负载均衡配置
注意,虚拟机是会为ikuai给予一个虚拟网卡的,ubuntu也会被给予一张,相当于ikuai和ubuntu是链接在了同一台虚拟交换机中,当ikuai为该虚拟网口分配ip段,作为dhcp服务器时,ubuntu虚拟机将获得来自ikuai分配的ip
静态路由配置则是将去往对方局域网的下一跳ip设置为ubuntu的ip,让wg可以获取去往对端的请求并在加密后进行转发
ddns则是为ikuai的某条公网ip配置一个域名,让对端可以进行访问
在安装好ubuntu虚拟机后,进行如下基础配置
sudo apt update && sudo apt upgrade -y
sudo apt install wireguard -y
sudo ufw allow ssh #允许ssh远程连接
sudo ufw allow 51820/udp # 放行 WireGuard 端口 (UDP) 在ubuntu中安装好wireguard后即可进行下一步
sudo -i # 进入管理员模式
cd /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey # 生成公钥和私钥
cat /etc/wireguard/privatekey # 查看私钥
cat /etc/wireguard/publickey # 查看公钥
vim /etc/wireguard/wg0.conf # 创建配置文件 文件配置内容
[Interface]
PrivateKey = <A的私钥>
Address = 10.0.9.1/24
ListenPort = 51820
PostUp = sysctl -w net.ipv4.ip_forward=1 #临时开启内核数据包转发,否则流量进来出不去
[Peer]
PublicKey = <B的公钥>
AllowedIPs = 10.0.9.2/32, 192.168.248.0/24
[Interface]
PrivateKey = <B的私钥>
Address = 10.0.9.2/24
PostUp = sysctl -w net.ipv4.ip_forward=1
[Peer]
PublicKey = <A的公钥>
AllowedIPs = 10.0.9.1/24
Endpoint = 192.168.150.38:51820 #服务端的ip与端口,服务端ikuai需要通过域名映射端口到下面linux ip
PersistentKeepalive = 10 端点也可以如下配置,先使用本地ip快速启动wg,然后postUp会修改为真正的端点进行连接
#在wg启动后修改peer
PostUp = wg set wg0 peer <对端的公钥> endpoint xxx.com:51820
#修改端点为本地,快速启动wg
Endpoint = 127.0.0.1:51820 使用如下命令来管理wg隧道
sudo wg-quick up wg0 # 开启隧道wg0
sudo wg-quick down wg0 # 关闭wg0
sudo wg show # 展示wg状态
sudo systemctl enable wg-quick@wg0 # 将隧道wg0设置为开机自启 由于B端是主动连接方,如果A断电重启,A的公网ip变化,B端有可能还在使用原来的ip去连接,导致隧道不通
因此如下在B端创建定时任务,每分钟检测一次隧道是否连通,否则直接关闭重启隧道,这样就会使用新的ip去连接
1.创建定时任务文件
sudo vim /etc/wireguard/check_wg_reconnect.sh 2.写入定时任务代码
TARGET_IP="10.0.9.1"
if ! ping -c 3 -W 2 $TARGET_IP > /dev/null 2>&1; then
echo "$(date): Ping $TARGET_IP 失败,正在重新解析域名并重启 $WG_INTERFACE..." >> /etc/wireguard/reconnect.log
sudo wg-quick down wg0 # 关闭wg
sudo wg-quick up wg0 # 开启wg
fi 3.添加定时任务
sudo crontab -e #进入root的crontab
* * * * * /bin/bash /etc/wireguard/check_wg_reconnect.sh #添加到crontab文件,每分钟执行一次 在配置好之后,即可互ping测试联通性,在联通没有问题之后进行下一步自动化
由于手动命令控制wg比较繁琐不便,且无法实时监控流量大小,所以可以编写一个web程序来进行控制与监控,这里的代码不给予展示,只给出简单的部署方式之一
将文件通过ftp传到ubuntu家目录,然后 cp -r 将文件递归复制到 /opt下
cd /home/qkadmin
cp -r wg-monitor /opt/ 虚拟环境配置及程序测试启动
apt update
apt install python3-venv python3-pip -y # 确保有虚拟环境工具
#激活虚拟环境(上一步中将程序文件放入其中)
cd /opt/wg-monitor
python3 -m venv venv # 如果已有旧的 venv,可用 rm -rf venv 先删除
source venv/bin/activate # 激活退出虚拟环境
pip install psutil flask # 安装库
deactivate # 退出虚拟环境
#虚拟环境下运行python程序(必须测试,验证程序是否正常运行)
sudo /opt/wg-monitor/venv/bin/python3 main.py &
sudo /opt/wg-monitor/venv/bin/python3 appweb.py &
pkill python # 停止所有python进程
ps f | grep python # 查看python所有进程
ps ef | grep python # 查看进程及环境 创建启动脚本 vim /opt/wg-monitor/start.sh
#!/bin/bash
cd /opt/wg-monitor
/opt/wg-monitor/venv/bin/python3 main.py &
/opt/wg-monitor/venv/bin/python3 appweb.py > /dev/null 2>&1 &
wait sudo chmod +x /opt/wg-monitor/start.sh #增加执行权限,避免systemd无法执行启动程序 创建systemd服务 vim /etc/systemd/system/wg-monitor.service
[Unit]
Description=WireGuard Tunnel Monitor
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/opt/wg-monitor/start.sh
User=root
WorkingDirectory=/opt/wg-monitor
Restart=always
RestartSec=5
KillMode=mixed
[Install]
WantedBy=multi-user.target 设置开机自启,然后启动测试web
#服务文件需要在 /etc/systemd/system/ 下创建,后缀.service
systemctl enable wg-monitor # 开机自启
systemctl daemon-reload # 重启systemd服务
systemctl start wg-monitor # 启动
systemctl status wg-monitor # 状态
systemctl restart wg-monitor # 重启
systemctl stop wg-monitor # 停止 通过 ip:5000 来访问web监控程序
本教程是大致记录,必有细节缺失或描述不到位,请见谅。总体上,该方案能满足中小企业的需求不高的网络搭建与异地组网要求。对于需要多节点组网的企业,可以选择更加成熟的sd-wan平台,这里使用原生wireguard是因为该企业需求不高,可以使用原生wireguard来最大化提升效率。