Vyos部署指南
网络操作系统对比及VyOS详细配置指南
各网络操作系统特性对比
特性 | VyOS | pfSense | OPNsense | OpenWrt | Tinc |
---|---|---|---|---|---|
GUI | 无 | 有 | 有 | 有 | 有 |
易用性 | 较难 | 容易 | 中等 | 较难 | 容易 |
功能丰富度 | 高 | 高 | 中等 | 中等 | 低 |
安全性 | 高 | 中等 | 高 | 中等 | 高 |
性能 | 高 | 中等 | 中等 | 低 | 高 |
社区活跃度 | 高 | 高 | 高 | 高 | 中等 |
适用场景 | 大型企业、定制化需求 | 中小型企业、分支机构 | 对安全性要求高的场景 | 低成本、定制化边缘设备 | 简单、安全的 VPN 连接 |
是否推荐 | 推荐 | 商业化 | 推荐 | 推荐 | / |
阿里云部署 | 成功 | / | 失败 | 成功 | / |
VyOS介绍
VyOS是一个基于Linux的开源的企业级路由器平台,使用Debian GNU/Linux作为其基础,并添加了FRR(一个强大的开源路由套件),以及开源的VPN技术OpenVPN、Wireguard和IPSec在内的多种工具来增强其功能。
构建VyOS
- 原生构建:
- 参考文档:https://docs.vyos.io/en/latest/contributing/build-vyos.html,使用国外VPS Ubuntu24.04
Terminal window git clone -b current --single-branch https://github.com/vyos/vyos-buildcd vyos-buildmake clean./build-vyos-image generic --architecture amd64 --build-by "j.randomhacker@vyos.io" - docker构建:
Terminal window docker pull vyos/vyos-build:currentgit clone -b current --single-branch https://github.com/vyos/vyos-buildcd vyos-builddocker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:current bashmake clean./build-vyos-image --architecture amd64 --build-by "j.randomhacker@vyos.io" generic
安装VyOS
- 在docker上安装:
Terminal window mkdir vyos && cd vyoscurl -o vyos-1.5-rolling-202501110007-generic-amd64.iso https://github.com/vyos/vyos-nightly-build/releases/download/1.5-rolling-202501110007/vyos-1.5-rolling-202501110007-generic-amd64.isomkdir rootfsmount -o loop vyos-1.5-rolling-202501110007-generic-amd64.iso rootfsapt-get install -y squashfs-toolsmkdir unsquashfsunsquashfs -f -d unsquashfs/ rootfs/live/filesystem.squashfstar -C unsquashfs -c . | docker import - vyos:1.5-rolling-202501110007umount rootfsdocker run -d --net host --name vyos --privileged -v /lib/modules:/lib/modules vyos:1.5-rolling-202501110007 /sbin/initdocker exec -it vyos bashnetstat -ntupl - 提交到镜像仓库:
Terminal window docker login swr.cn-south-1.myhuaweicloud.com -u cn-south-1@L2VRSJUQWSAXPWLNPUMH -p 486b0ea3ee846dcd4b7c7e880b8719cd347f721de6113fd5210f3c4b5d19c195docker commit vyos swr.cn-south-1.myhuaweicloud.com/kailinjt/vyos:1.5-rolling-202501110007docker push swr.cn-south-1.myhuaweicloud.com/kailinjt/vyos:1.5-rolling-202501110007docker run -d --name vyos --privileged --sysctl net.ipv6.conf.all.disable_ipv6=0 -v /lib/modules:/lib/modules swr.cn-south-1.myhuaweicloud.com/kailinjt/vyos:1.5-rolling-202501110007 /sbin/initdocker exec -it vyos su - vyos - 在虚拟机virtualbox上安装:
- 添加硬盘选择vhd格式,可以导入到阿里云
- iso加载光驱启动,选择Kvm console
- 用户密码:
vyos/hy123456
Terminal window show versioninstall image # 安装 - 配置ssh和IP:
Terminal window show interfacesconfigureset service ssh port 22 #配置默认ssh端口set interfaces ethernet eth0 address 192.168.6.195/24 #配置eth0口上网ipset protocols static route 0.0.0.0/0 next-hop 192.168.6.254 #配置默认路由commit #应用配置save #保存配置 - 配置DNS:参考https://docs.vyos.io/en/latest/configuration/system/name-server.html
Terminal window configureset system name-server 114.114.114.114set system name-server 8.8.8.8 - VHD镜像导入阿里云:
- 可以启动ECS
- 使用vnc连接,配置IP
Terminal window configureset interfaces ethernet eth1 address dhcpcommit #应用配置save #保存配置exitip rshow version- 版本信息:
Version: VyOS 1.5-rolling-202502080927Release train: currentRelease flavor: genericBuilt by: j.randomhacker@vyos.ioBuilt on: Sat 08 Feb 2025 09:27 UTCBuild UUID: e3c31cde-512e-4d5b-afa9-7a95a1d18978Build commit ID: d1cdd2d87d94acArchitecture: x86_64Boot via: installed imageSystem type: KVM guestSecure Boot: n/a (BIOS)Hardware vendor: Alibaba CloudHardware model: Alibaba Cloud ECSHardware S/N: 0b233b88-18c5-43fd-9c76-6b699df03c83Hardware UUID: 0b233b88-18c5-43fd-9c76-6b699df03c83Copyright: VyOS maintainers and contributors
VyOS架构部署(使用HUB集线器模式)
- 架构信息:
- gateways A 10.1.0.0/16 112.124.44.27
- gateways B 10.2.0.0/16 47.104.140.31
- gateways C 10.3.0.0/16 39.106.40.53
- 使用HUB集线器模式,A充当集线器需要公网IP,B/C不需要公网IP
- A配置(Hub):
- 隧道配置:
Terminal window set interfaces tunnel tun100 address '192.168.254.62/32'set interfaces tunnel tun100 enable-multicastset interfaces tunnel tun100 encapsulation 'gre'set interfaces tunnel tun100 parameters ip key '42'set interfaces tunnel tun100 source-interface 'eth1'- NHRP设置:
Terminal window set protocols nhrp tunnel tun100 authentication 'U2XMZqZP'set protocols nhrp tunnel tun100 holdtime '300'set protocols nhrp tunnel tun100 multicast 'dynamic'set protocols nhrp tunnel tun100 network-id '1'set protocols nhrp tunnel tun100 redirectset protocols nhrp tunnel tun100 registration-no-unique- 静态路由,分支网络:
Terminal window set protocols static route 10.2.0.0/16 next-hop 192.168.254.1set protocols static route 10.3.0.0/16 next-hop 192.168.254.2- IPSec配置:
Terminal window set vpn ipsec esp-group ESP-HUB lifetime '1800'set vpn ipsec esp-group ESP-HUB mode 'transport'set vpn ipsec esp-group ESP-HUB pfs 'dh-group2'set vpn ipsec esp-group ESP-HUB proposal 1 encryption 'aes256'set vpn ipsec esp-group ESP-HUB proposal 1 hash 'sha1'set vpn ipsec ike-group IKE-HUB key-exchange 'ikev1'set vpn ipsec ike-group IKE-HUB lifetime '3600'set vpn ipsec ike-group IKE-HUB proposal 1 dh-group '2'set vpn ipsec ike-group IKE-HUB proposal 1 encryption 'aes256'set vpn ipsec ike-group IKE-HUB proposal 1 hash 'sha1'set vpn ipsec interface 'eth1'set vpn ipsec profile NHRPVPN authentication mode 'pre-shared-secret'set vpn ipsec profile NHRPVPN authentication pre-shared-secret 'JFSXAtNAXEmN9ZcX'set vpn ipsec profile NHRPVPN bind tunnel 'tun100'set vpn ipsec profile NHRPVPN esp-group 'ESP-HUB'set vpn ipsec profile NHRPVPN ike-group 'IKE-HUB' - B配置(Spoke):
- 隧道配置:
Terminal window set interfaces tunnel tun100 address '192.168.254.1/32'set interfaces tunnel tun100 enable-multicastset interfaces tunnel tun100 encapsulation 'gre'set interfaces tunnel tun100 parameters ip key '42'set interfaces tunnel tun100 source-interface 'eth1'- NHRP设置:
Terminal window set protocols nhrp tunnel tun100 authentication "U2XMZqZP"set protocols nhrp tunnel tun100 holdtime '300'set protocols nhrp tunnel tun100 multicast 'dynamic'set protocols nhrp tunnel tun100 network-id '1'set protocols nhrp tunnel tun100 nhs tunnel-ip dynamic nbma '112.124.44.27'set protocols nhrp tunnel tun100 registration-no-uniqueset protocols nhrp tunnel tun100 shortcut- 静态路由:
Terminal window set protocols static route 192.168.254.0/24 next-hop 192.168.254.62set protocols static route 10.1.0.0/16 next-hop 192.168.254.62set protocols static route 10.3.0.0/16 next-hop 192.168.254.2- IPSec配置:
Terminal window set vpn ipsec esp-group ESP-HUB lifetime '1800'set vpn ipsec esp-group ESP-HUB mode 'transport'set vpn ipsec esp-group ESP-HUB pfs 'dh-group2'set vpn ipsec esp-group ESP-HUB proposal 1 encryption 'aes256'set vpn ipsec esp-group ESP-HUB proposal 1 hash 'sha1'set vpn ipsec ike-group IKE-HUB key-exchange 'ikev1'set vpn ipsec ike-group IKE-HUB lifetime '3600'set vpn ipsec ike-group IKE-HUB proposal 1 dh-group '2'set vpn ipsec ike-group IKE-HUB proposal 1 encryption 'aes256'set vpn ipsec ike-group IKE-HUB proposal 1 hash 'sha1'set vpn ipsec interface 'eth1'set vpn ipsec profile NHRPVPN authentication mode 'pre-shared-secret'set vpn ipsec profile NHRPVPN authentication pre-shared-secret 'JFSXAtNAXEmN9ZcX'set vpn ipsec profile NHRPVPN bind tunnel 'tun100'set vpn ipsec profile NHRPVPN esp-group 'ESP-HUB'set vpn ipsec profile NHRPVPN ike-group 'IKE-HUB' - C配置(Spoke):
- 隧道配置:
Terminal window set interfaces tunnel tun100 address '192.168.254.2/32'set interfaces tunnel tun100 enable-multicastset interfaces tunnel tun100 encapsulation 'gre'set interfaces tunnel tun100 parameters ip key '42'set interfaces tunnel tun100 source-interface 'eth1'- NHRP设置:
Terminal window set protocols nhrp tunnel tun100 authentication "U2XMZqZP"set protocols nhrp tunnel tun100 holdtime '300'set protocols nhrp tunnel tun100 multicast 'dynamic'set protocols nhrp tunnel tun100 network-id '1'set protocols nhrp tunnel tun100 nhs tunnel-ip dynamic nbma '112.124.44.27'set protocols nhrp tunnel tun100 registration-no-uniqueset protocols nhrp tunnel tun100 shortcut- 静态路由:
Terminal window set protocols static route 192.168.254.0/24 next-hop 192.168.254.62set protocols static route 10.1.0.0/16 next-hop 192.168.254.62set protocols static route 10.2.0.0/16 next-hop 192.168.254.1- IPSec配置:
Terminal window set vpn ipsec esp-group ESP-HUB lifetime '1800'set vpn ipsec esp-group ESP-HUB mode 'transport'set vpn ipsec esp-group ESP-HUB pfs 'dh-group2'set vpn ipsec esp-group ESP-HUB proposal 1 encryption 'aes256'set vpn ipsec esp-group ESP-HUB proposal 1 hash 'sha1'set vpn ipsec ike-group IKE-HUB key-exchange 'ikev1'set vpn ipsec ike-group IKE-HUB lifetime '3600'set vpn ipsec ike-group IKE-HUB proposal 1 dh-group '2'set vpn ipsec ike-group IKE-HUB proposal 1 encryption 'aes256'set vpn ipsec ike-group IKE-HUB proposal 1 hash 'sha1'set vpn ipsec interface 'eth1'set vpn ipsec profile NHRPVPN authentication mode 'pre-shared-secret'set vpn ipsec profile NHRPVPN authentication pre-shared-secret 'JFSXAtNAXEmN9ZcX'set vpn ipsec profile NHRPVPN bind tunnel 'tun100'set vpn ipsec profile NHRPVPN esp-group 'ESP-HUB'set vpn ipsec profile NHRPVPN ike-group 'IKE-HUB'
VyOS检测、VPN配置及监控指南
检测命令
- 查看IPsec连接信息:
show vpn ipsec con
- 查看IPsec安全关联(SA)信息:
show vpn ipsec sa
- 查看NHRP缓存:
show ip nhrp cache
- 查看NHRP下一跳服务器(NHS)信息:
show ip nhrp nhs
SSL VPN配置
- 参考文档:
- 生成CA证书(有效期3650天):
configurerun generate pki ca install ca-ocserv
- 生成服务器证书(有效期3650天):
run generate pki certificate sign ca-ocserv install srv-ocserv
- Openconnect配置:
set vpn openconnect authentication local-users username gaojinbo password 'gaojinbo.com'set vpn openconnect authentication mode local passwordset vpn openconnect network-settings client-ip-settings subnet '172.20.20.0/24'set vpn openconnect network-settings name-server '114.114.114.114'set vpn openconnect network-settings name-server '8.8.8.8'set vpn openconnect ssl ca-certificate 'ca-ocserv'set vpn openconnect ssl certificate 'srv-ocserv'
- 设置HTTP安全头:
set vpn openconnect http-security-headers
- 配置客户端路由:
- 使客户端全部流量走SSL VPN:
set vpn openconnect network-settings push-route '0.0.0.0/0'
- 配置客户端指定网段(如10.0.0.0/8)走SSL VPN(需删除`0.0.0.0/0`配置):
set vpn openconnect network-settings push-route '10.0.0.0/8'
- 配置NAT转发:
set nat source rule 100 outbound-interface 'eth1'set nat source rule 100 translation address 'masquerade'
- 配置双因素认证(2FA):
- 生成用户
gaojinbo
的OTP密钥并获取二维码给用户扫描:
- 生成用户
generate openconnect username gaojinbo otp-key hotp-time
- 配置系统时区:
configureset system time-zone Asia/Chongqing
- 设置认证模式为本地密码+OTP:
set vpn openconnect authentication mode local password-otp
- 设置用户`gaojinbo`的OTP密钥:
set vpn openconnect authentication local-users username gaojinbo otp key '1a3612358a0fe732e3e915c7cfd573da69edf73c'
- 提交并保存配置,重启服务使2FA生效:
commitsaverestart openconnect-server
- 查看会话和用户OTP信息:
- 查看Openconnect服务器会话:
sh openconnect-server sessions
- 查看用户`gaojinbo`的完整OTP信息:
show openconnect-server user gaojinbo otp full
- 客户端下载:
- Windows/Linux客户端:https://gui.openconnect-vpn.net/download/
- Android客户端:https://f-droid.org/packages/app.openconnect/
SSTP VPN配置
参考文档:https://docs.vyos.io/en/latest/configuration/vpn/sstp.html 说明:通过SSTP配置的VPN可以实现科学上网,使用PPP拨号并通过443端口传输数据。
监控
参考文档:https://docs.vyos.io/pt/latest/configuration/service/monitoring.html