文章介绍:使用vyos-1.5.0滚动版自建组网,本篇使用组网协议:OpenVPN,模式:site-to-site。

一、组网架构

1.1、拓扑图

yydy_2024-06-16_16-08-09

1.2、拓扑说明

在vyos中使用openvpn组网建立隧道,只需要一端有动态公网IP地址即可,根据上图所示,定义左侧VyOS PE 为服务端具有公网IP(因为我这里是纯内网环境,把eth0口的10.225.97.11作为公网IP使用),VyOS CE端无公网IP模式。

二、部署前准备

2.1、镜像下载

GitHub 滚动版 VyOS 下载地址 博主网盘 VyOS 下载地址

2.2、VyOS安装配置指导

VyOS 开源篇

三、vyos-pe端配置

官方 VyOS 配置 OpenVPN Site-to-Site 指导

3.1、基础配置

set interfaces dummy dum0 address '10.10.10.10/32'
set interfaces ethernet eth0 address '10.225.97.11/24'
set protocols static route 0.0.0.0/0 next-hop 10.225.97.1
set service ssh port '22'
set system host-name 'vyos-pe'

3.2、生成证书

从 VyOS 1.4 开始,OpenVPN 站点到站点模式可以使用预共享密钥或 x.509 证书,但是预共享密钥模式已被弃用,并将从未来的 OpenVPN 版本中删除,因此 VyOS 也必须删除对该选项的支持。原因是使用预共享密钥的安全性明显低于使用 TLS,下面我们将使用自签名证书配置 OpenVPN。

run generate pki certificate self-signed install openvpn-pe

yydy_2024-06-16_17-21-55

3.3、检索SHA-256指纹

复制回显的信息,稍后要在对端填写。

run show pki certificate openvpn-pe fingerprint sha256

yydy_2024-06-16_17-22-08

四、vyos-ce端配置

4.1、基础配置

set interfaces dummy dum0 address '20.20.20.20/32'
set interfaces ethernet eth0 address '10.225.97.12/24'
set protocols static route 0.0.0.0/0 next-hop 10.225.97.1
set service ssh port '22'
set system host-name 'vyos-ce'

4.2、生成证书

run generate pki certificate self-signed install openvpn-ce

yydy_2024-06-16_17-33-37

4.3、检索SHA-256指纹

复制回显的信息,稍后要在对端填写。

run show pki certificate openvpn-ce fingerprint sha256

yydy_2024-06-16_17-33-50

五、vyos配置openvpn

5.1、vyos-pe

set interfaces openvpn vtun1 description 'to-vyos-ce'
set interfaces openvpn vtun1 local-address 100.64.1.1 subnet-mask '255.255.255.252'
set interfaces openvpn vtun1 local-host '10.225.97.11'
set interfaces openvpn vtun1 local-port '10000'
set interfaces openvpn vtun1 mode 'site-to-site'
set interfaces openvpn vtun1 openvpn-option '--persist-tun'
set interfaces openvpn vtun1 persistent-tunnel
set interfaces openvpn vtun1 protocol 'udp'
set interfaces openvpn vtun1 remote-address '100.64.1.2'
set interfaces openvpn vtun1 tls certificate 'openvpn-pe'
set interfaces openvpn vtun1 tls peer-fingerprint 'A1:FC:7F:6E:40:86:2C:6D:2A:2A:54:C4:60:5D:3E:5B:EF:94:AA:B3:25:59:3F:38:76:0F:29:07:8C:E7:32:C1'
set interfaces openvpn vtun1 tls role 'passive' #pe端选择被动连接
  1. set interfaces openvpn vtun1 description 'to-vyos-ce':

    • 描述: 为接口vtun1添加一个描述。
  2. set interfaces openvpn vtun1 local-address 100.64.1.1 subnet-mask '255.255.255.252':

    • 本地地址: 设置本地OpenVPN接口vtun1的IP地址为100.64.1.1,子网掩码为255.255.255.252
  3. set interfaces openvpn vtun1 local-host '10.225.97.11':

    • 本地主机: 指定OpenVPN接口vtun1在本地的IP地址为10.225.97.11,用于建立OpenVPN连接的本地端点。
  4. set interfaces openvpn vtun1 local-port '10000':

    • 本地端口: 设置OpenVPN接口vtun1使用本地端口10000进行通信。
  5. set interfaces openvpn vtun1 mode 'site-to-site':

    • 模式: 将OpenVPN接口vtun1配置为站点到站点(site-to-site)模式,通常用于连接两个不同站点的网络。
  6. set interfaces openvpn vtun1 openvpn-option '--persist-tun':

    • OpenVPN选项: 添加OpenVPN选项--persist-tun,这确保了在重新启动或连接断开时保持隧道接口的持久性。
  7. set interfaces openvpn vtun1 persistent-tunnel:

    • 持久隧道: 启用持久隧道,这意味着隧道连接会自动尝试重连,确保持续的VPN连接。
  8. set interfaces openvpn vtun1 protocol 'udp':

    • 协议: 指定OpenVPN接口vtun1使用UDP协议进行传输。
  9. set interfaces openvpn vtun1 remote-address '100.64.1.2':

    • 远程地址: 设置对端(远程)OpenVPN接口的IP地址为100.64.1.2
  10. set interfaces openvpn vtun1 tls certificate 'openvpn-pe':

    • TLS证书: 指定使用名为openvpn-pe的TLS证书,用于加密和认证OpenVPN连接。
  11. set interfaces openvpn vtun1 tls peer-fingerprint 'A1:FC:7F:6E:40:86:2C:6D:2A:2A:54:C4:60:5D:3E:5B:EF:94:AA:B3:25:59:3F:38:76:0F:29:07:8C:E7:32:C1':

    • 对等方指纹: 设置对端TLS证书的指纹,用于验证对端身份,确保连接的安全性。
  12. set interfaces openvpn vtun1 tls role 'passive':

    • TLS角色: 将该OpenVPN接口配置为被动角色,这意味着它不会主动发起TLS连接,而是等待对端连接请求。

5.2、vyos-ce

set interfaces openvpn vtun1 description 'to-vyos-pe'
set interfaces openvpn vtun1 local-address 100.64.1.2 subnet-mask '255.255.255.252'
set interfaces openvpn vtun1 mode 'site-to-site'
set interfaces openvpn vtun1 openvpn-option '--nobind'
set interfaces openvpn vtun1 openvpn-option '--ping 10'
set interfaces openvpn vtun1 openvpn-option '--ping-restart 60'
set interfaces openvpn vtun1 openvpn-option '--persist-tun'
set interfaces openvpn vtun1 persistent-tunnel
set interfaces openvpn vtun1 protocol 'udp'
set interfaces openvpn vtun1 remote-address '100.64.1.1'
set interfaces openvpn vtun1 remote-host '10.225.97.11'
set interfaces openvpn vtun1 remote-port '10000'
set interfaces openvpn vtun1 tls certificate 'openvpn-ce'
set interfaces openvpn vtun1 tls peer-fingerprint '66:91:A3:C5:3E:0F:37:C2:5F:8B:74:92:FB:1D:F3:C4:E9:51:97:DF:C4:6A:85:1C:58:49:3D:1D:11:3F:2A:32'
set interfaces openvpn vtun1 tls role 'active' #ce端选择主动连接
  1. set interfaces openvpn vtun1 description 'to-vyos-pe':

    • 描述: 为接口vtun1添加一个描述。
  2. set interfaces openvpn vtun1 local-address 100.64.1.2 subnet-mask '255.255.255.252':

    • 本地地址: 设置本地OpenVPN接口vtun1的IP地址为100.64.1.2,子网掩码为255.255.255.252
  3. set interfaces openvpn vtun1 mode 'site-to-site':

    • 模式: 将OpenVPN接口vtun1配置为站点到站点(site-to-site)模式,通常用于连接两个不同站点的网络。
  4. set interfaces openvpn vtun1 openvpn-option '--nobind':

    • OpenVPN选项: 添加OpenVPN选项--nobind,使客户端不绑定到特定的本地端口,而是由操作系统分配。
  5. set interfaces openvpn vtun1 openvpn-option '--ping 10':

    • OpenVPN选项: 添加OpenVPN选项--ping 10,每10秒发送一次ping包,以检测对端的连通性。
  6. set interfaces openvpn vtun1 openvpn-option '--ping-restart 60':

    • OpenVPN选项: 添加OpenVPN选项--ping-restart 60,如果60秒内未收到ping响应,则重启连接。
  7. set interfaces openvpn vtun1 openvpn-option '--persist-tun':

    • OpenVPN选项: 添加OpenVPN选项--persist-tun,确保在重新启动或连接断开时保持隧道接口的持久性。
  8. set interfaces openvpn vtun1 persistent-tunnel:

    • 持久隧道: 启用持久隧道,意味着隧道连接会自动尝试重连,确保持续的VPN连接。
  9. set interfaces openvpn vtun1 protocol 'udp':

    • 协议: 指定OpenVPN接口vtun1使用UDP协议进行传输。
  10. set interfaces openvpn vtun1 remote-address '100.64.1.1':

    • 远程地址: 设置对端(远程)OpenVPN接口的IP地址为100.64.1.1
  11. set interfaces openvpn vtun1 remote-host '10.225.97.11':

    • 远程主机: 指定对端的主机IP地址为10.225.97.11,用于建立OpenVPN连接的远程端点。
  12. set interfaces openvpn vtun1 remote-port '10000':

    • 远程端口: 设置OpenVPN接口vtun1使用远程端口10000进行通信。
  13. set interfaces openvpn vtun1 tls certificate 'openvpn-ce':

    • TLS证书: 指定使用名为openvpn-ce的TLS证书,用于加密和认证OpenVPN连接。
  14. set interfaces openvpn vtun1 tls peer-fingerprint '66:91:A3:C5:3E:0F:37:C2:5F:8B:74:92:FB:1D:F3:C4:E9:51:97:DF:C4:6A:85:1C:58:49:3D:1D:11:3F:2A:32':

    • 对等方指纹: 设置对端TLS证书的指纹,用于验证对端身份,确保连接的安全性。
  15. set interfaces openvpn vtun1 tls role 'active':

    • TLS角色: 将该OpenVPN接口配置为主动角色,这意味着它会主动发起TLS连接请求。

六、连通性测试

6.1、pe-ping-ce

ping 100.64.1.2 -c 4

yydy_2024-06-16_17-50-15

6.2、ce-ping-pe

ping 100.64.1.1 -c 4

yydy_2024-06-16_17-50-48

七、配置BGP发布路由

7.1、vyos-pe

set policy prefix-list LAN rule 10 action 'permit'
set policy prefix-list LAN rule 10 prefix '10.10.10.10/32'
set policy route-map LAN rule 10 action 'permit'
set policy route-map LAN rule 10 match ip address prefix-list 'LAN'
set policy route-map LAN rule 20 action 'deny'
set protocols bgp address-family ipv4-unicast redistribute connected route-map 'LAN'
set protocols bgp neighbor 100.64.1.2 address-family ipv4-unicast prefix-list export 'LAN'
set protocols bgp neighbor 100.64.1.2 address-family ipv4-unicast soft-reconfiguration inbound
set protocols bgp neighbor 100.64.1.2 remote-as '65000'
set protocols bgp neighbor 100.64.1.2 update-source '100.64.1.1'
set protocols bgp parameters router-id '100.64.1.1'
set protocols bgp system-as '65000'
  1. 前缀列表

    • set policy prefix-list LAN rule 10 action 'permit':允许前缀列表LAN中的规则10。
    • set policy prefix-list LAN rule 10 prefix '10.10.10.10/32':在规则10中,指定前缀10.10.10.10/32
  2. 路由映射

    • set policy route-map LAN rule 10 action 'permit':允许路由映射LAN中的规则10。
    • set policy route-map LAN rule 10 match ip address prefix-list 'LAN':规则10匹配前缀列表LAN
    • set policy route-map LAN rule 20 action 'deny':默认拒绝未匹配的路由。
  3. BGP重新分发和邻居配置

    • set protocols bgp address-family ipv4-unicast redistribute connected route-map 'LAN':使用路由映射LAN重新分发已连接路由。
    • set protocols bgp neighbor 100.64.1.2 address-family ipv4-unicast prefix-list export 'LAN':使用前缀列表LAN过滤出口路由。
    • set protocols bgp neighbor 100.64.1.2 address-family ipv4-unicast soft-reconfiguration inbound:启用入站软重配置。
    • set protocols bgp neighbor 100.64.1.2 remote-as '65000':指定远端AS号。
    • set protocols bgp neighbor 100.64.1.2 update-source '100.64.1.1':指定更新源地址。
    • set protocols bgp parameters router-id '100.64.1.1':设置路由器ID。
    • set protocols bgp system-as '65000':设置本地AS号。

7.2、vyos-ce

set policy prefix-list LAN rule 10 action 'permit'
set policy prefix-list LAN rule 10 prefix '20.20.20.20/32'
set policy route-map LAN rule 10 action 'permit'
set policy route-map LAN rule 10 match ip address prefix-list 'LAN'
set policy route-map LAN rule 20 action 'deny'
set protocols bgp address-family ipv4-unicast redistribute connected route-map 'LAN'
set protocols bgp neighbor 100.64.1.1 address-family ipv4-unicast prefix-list export 'LAN'
set protocols bgp neighbor 100.64.1.1 address-family ipv4-unicast soft-reconfiguration inbound
set protocols bgp neighbor 100.64.1.1 remote-as '65000'
set protocols bgp neighbor 100.64.1.1 update-source '100.64.1.2'
set protocols bgp parameters router-id '100.64.1.2'
set protocols bgp system-as '65000'
  1. 策略路由相关配置:

    • 这些命令定义了一个名为LAN的前缀列表(prefix-list),并配置了一个名为LAN的路由映射(route-map)。
    • 前缀列表LAN包含一个允许(permit)的规则,匹配单个IP地址 20.20.20.20/32
    • 路由映射LAN包含两个规则:第一个规则允许匹配前缀列表LAN中的IP地址,第二个规则拒绝(deny)所有其他IP地址。
  2. BGP相关配置:

    • redistribute connected route-map 'LAN': 将设备上的直连路由通过BGP协议向其他BGP邻居进行重分发,重分发时使用路由映射LAN进行筛选。
    • neighbor 100.64.1.1 ...: 配置了一个BGP邻居,IP地址为 100.64.1.1,远端AS号为 65000
      • prefix-list export 'LAN': 向邻居导出匹配前缀列表LAN的路由。
      • soft-reconfiguration inbound: 启用邻居的入站软重配置,以便在不中断BGP会话的情况下查看更新。
      • update-source '100.64.1.2': 配置BGP会话的源IP地址为 100.64.1.2
    • router-id '100.64.1.2': 指定BGP路由器ID为 100.64.1.2
    • system-as '65000': 设置本地设备的AS号为 65000

八、查看BGP状态

8.1、vyos-pe

show ip bgp summary

yydy_2024-06-16_19-06-07

8.2、vyos-ce

yydy_2024-06-16_19-06-26

九、查看BGP路由信息

9.1、查看bgp宣告的路由信息

9.1.1、vyos-pe

show ip bgp neighbors 100.64.1.2 advertised-routes

yydy_2024-06-16_19-08-04

9.1.2、vyos-ce

show ip bgp neighbors 100.64.1.1 advertised-routes

yydy_2024-06-16_19-11-12

9.2、查看bgp接收的路由信息

9.2.1、vyos-pe

show ip bgp neighbors 100.64.1.2 received-routes

yydy_2024-06-16_19-08-15

9.2.2、vyos-ce

show ip bgp neighbors 100.64.1.1 received-routes

yydy_2024-06-16_19-12-58

十、ping/tracert测试

10.1、pe->-ce

sudo ping 20.20.20.20 -c 4
sudo traceroute 20.20.20.20

yydy_2024-06-16_19-15-05

10.2、ce->-pe

sudo ping 10.10.10.10 -c 4
sudo traceroute 10.10.10.10

yydy_2024-06-16_19-16-30