文章介绍:使用vyos-1.5.0滚动版自建组网,本篇使用组网协议:OpenVPN,模式:site-to-site。
一、组网架构 {#一-组网架构}
1.1、拓扑图 {#1-1-拓扑图}
1.2、拓扑说明 {#1-2-拓扑说明}
在vyos中使用openvpn组网建立隧道,只需要一端有动态公网IP地址即可,根据上图所示,定义左侧VyOS PE 为服务端具有公网IP(因为我这里是纯内网环境,把eth0口的10.225.97.11作为公网IP使用),VyOS CE端无公网IP模式。
二、部署前准备 {#二-部署前准备}
2.1、镜像下载 {#2-1-镜像下载}
GitHub 滚动版 VyOS 下载地址 博主网盘 VyOS 下载地址
2.2、VyOS安装配置指导 {#2-2-VyOS安装配置指导}
三、vyos-pe端配置 {#三-vyos-pe端配置}
官方 VyOS 配置 OpenVPN Site-to-Site 指导
3.1、基础配置 {#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、生成证书 {#3-2-生成证书}
从 VyOS 1.4 开始,OpenVPN 站点到站点模式可以使用预共享密钥或 x.509 证书,但是预共享密钥模式已被弃用,并将从未来的 OpenVPN 版本中删除,因此 VyOS 也必须删除对该选项的支持。原因是使用预共享密钥的安全性明显低于使用 TLS,下面我们将使用自签名证书配置 OpenVPN。
run generate pki certificate self-signed install openvpn-pe
3.3、检索SHA-256指纹 {#3-3-检索SHA-256指纹}
复制回显的信息,稍后要在对端填写。
run show pki certificate openvpn-pe fingerprint sha256
四、vyos-ce端配置 {#四-vyos-ce端配置}
4.1、基础配置 {#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、生成证书 {#4-2-生成证书}
run generate pki certificate self-signed install openvpn-ce
4.3、检索SHA-256指纹 {#4-3-检索SHA-256指纹}
复制回显的信息,稍后要在对端填写。
run show pki certificate openvpn-ce fingerprint sha256
五、vyos配置openvpn {#五-vyos配置openvpn}
5.1、vyos-pe {#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端选择被动连接
-
set interfaces openvpn vtun1 description 'to-vyos-ce':
- 描述 : 为接口
vtun1
添加一个描述。
- 描述 : 为接口
-
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
。
- 本地地址 : 设置本地OpenVPN接口
-
set interfaces openvpn vtun1 local-host '10.225.97.11':
- 本地主机 : 指定OpenVPN接口
vtun1
在本地的IP地址为10.225.97.11
,用于建立OpenVPN连接的本地端点。
- 本地主机 : 指定OpenVPN接口
-
set interfaces openvpn vtun1 local-port '10000':
- 本地端口 : 设置OpenVPN接口
vtun1
使用本地端口10000
进行通信。
- 本地端口 : 设置OpenVPN接口
-
set interfaces openvpn vtun1 mode 'site-to-site':
- 模式 : 将OpenVPN接口
vtun1
配置为站点到站点(site-to-site)模式,通常用于连接两个不同站点的网络。
- 模式 : 将OpenVPN接口
-
set interfaces openvpn vtun1 openvpn-option '--persist-tun':
- OpenVPN选项 : 添加OpenVPN选项
--persist-tun
,这确保了在重新启动或连接断开时保持隧道接口的持久性。
- OpenVPN选项 : 添加OpenVPN选项
-
set interfaces openvpn vtun1 persistent-tunnel:
- 持久隧道: 启用持久隧道,这意味着隧道连接会自动尝试重连,确保持续的VPN连接。
-
set interfaces openvpn vtun1 protocol 'udp':
- 协议 : 指定OpenVPN接口
vtun1
使用UDP协议进行传输。
- 协议 : 指定OpenVPN接口
-
set interfaces openvpn vtun1 remote-address '100.64.1.2':
- 远程地址 : 设置对端(远程)OpenVPN接口的IP地址为
100.64.1.2
。
- 远程地址 : 设置对端(远程)OpenVPN接口的IP地址为
-
set interfaces openvpn vtun1 tls certificate 'openvpn-pe':
- TLS证书 : 指定使用名为
openvpn-pe
的TLS证书,用于加密和认证OpenVPN连接。
- TLS证书 : 指定使用名为
-
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证书的指纹,用于验证对端身份,确保连接的安全性。
-
set interfaces openvpn vtun1 tls role 'passive':
- TLS角色: 将该OpenVPN接口配置为被动角色,这意味着它不会主动发起TLS连接,而是等待对端连接请求。
5.2、vyos-ce {#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端选择主动连接
-
set interfaces openvpn vtun1 description 'to-vyos-pe':
- 描述 : 为接口
vtun1
添加一个描述。
- 描述 : 为接口
-
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
。
- 本地地址 : 设置本地OpenVPN接口
-
set interfaces openvpn vtun1 mode 'site-to-site':
- 模式 : 将OpenVPN接口
vtun1
配置为站点到站点(site-to-site)模式,通常用于连接两个不同站点的网络。
- 模式 : 将OpenVPN接口
-
set interfaces openvpn vtun1 openvpn-option '--nobind':
- OpenVPN选项 : 添加OpenVPN选项
--nobind
,使客户端不绑定到特定的本地端口,而是由操作系统分配。
- OpenVPN选项 : 添加OpenVPN选项
-
set interfaces openvpn vtun1 openvpn-option '--ping 10':
- OpenVPN选项 : 添加OpenVPN选项
--ping 10
,每10秒发送一次ping包,以检测对端的连通性。
- OpenVPN选项 : 添加OpenVPN选项
-
set interfaces openvpn vtun1 openvpn-option '--ping-restart 60':
- OpenVPN选项 : 添加OpenVPN选项
--ping-restart 60
,如果60秒内未收到ping响应,则重启连接。
- OpenVPN选项 : 添加OpenVPN选项
-
set interfaces openvpn vtun1 openvpn-option '--persist-tun':
- OpenVPN选项 : 添加OpenVPN选项
--persist-tun
,确保在重新启动或连接断开时保持隧道接口的持久性。
- OpenVPN选项 : 添加OpenVPN选项
-
set interfaces openvpn vtun1 persistent-tunnel:
- 持久隧道: 启用持久隧道,意味着隧道连接会自动尝试重连,确保持续的VPN连接。
-
set interfaces openvpn vtun1 protocol 'udp':
- 协议 : 指定OpenVPN接口
vtun1
使用UDP协议进行传输。
- 协议 : 指定OpenVPN接口
-
set interfaces openvpn vtun1 remote-address '100.64.1.1':
- 远程地址 : 设置对端(远程)OpenVPN接口的IP地址为
100.64.1.1
。
- 远程地址 : 设置对端(远程)OpenVPN接口的IP地址为
-
set interfaces openvpn vtun1 remote-host '10.225.97.11':
- 远程主机 : 指定对端的主机IP地址为
10.225.97.11
,用于建立OpenVPN连接的远程端点。
- 远程主机 : 指定对端的主机IP地址为
-
set interfaces openvpn vtun1 remote-port '10000':
- 远程端口 : 设置OpenVPN接口
vtun1
使用远程端口10000
进行通信。
- 远程端口 : 设置OpenVPN接口
-
set interfaces openvpn vtun1 tls certificate 'openvpn-ce':
- TLS证书 : 指定使用名为
openvpn-ce
的TLS证书,用于加密和认证OpenVPN连接。
- TLS证书 : 指定使用名为
-
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证书的指纹,用于验证对端身份,确保连接的安全性。
-
set interfaces openvpn vtun1 tls role 'active':
- TLS角色: 将该OpenVPN接口配置为主动角色,这意味着它会主动发起TLS连接请求。
六、连通性测试 {#六-连通性测试}
6.1、pe-ping-ce {#6-1-pe-ping-ce}
ping 100.64.1.2 -c 4
6.2、ce-ping-pe {#6-2-ce-ping-pe}
ping 100.64.1.1 -c 4
七、配置BGP发布路由 {#七-配置BGP发布路由}
7.1、vyos-pe {#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'
-
前缀列表:
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
。
-
路由映射:
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'
:默认拒绝未匹配的路由。
-
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 {#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'
-
策略路由相关配置:
- 这些命令定义了一个名为
LAN
的前缀列表(prefix-list),并配置了一个名为LAN
的路由映射(route-map)。 - 前缀列表
LAN
包含一个允许(permit)的规则,匹配单个IP地址20.20.20.20/32
。 - 路由映射
LAN
包含两个规则:第一个规则允许匹配前缀列表LAN
中的IP地址,第二个规则拒绝(deny)所有其他IP地址。
- 这些命令定义了一个名为
-
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状态 {#八-查看BGP状态}
8.1、vyos-pe {#8-1-vyos-pe}
show ip bgp summary
8.2、vyos-ce {#8-2-vyos-ce}
九、查看BGP路由信息 {#九-查看BGP路由信息}
9.1、查看bgp宣告的路由信息 {#9-1-查看bgp宣告的路由信息}
9.1.1、vyos-pe {#9-1-1-vyos-pe}
show ip bgp neighbors 100.64.1.2 advertised-routes
9.1.2、vyos-ce {#9-1-2-vyos-ce}
show ip bgp neighbors 100.64.1.1 advertised-routes
9.2、查看bgp接收的路由信息 {#9-2-查看bgp接收的路由信息}
9.2.1、vyos-pe {#9-2-1-vyos-pe}
show ip bgp neighbors 100.64.1.2 received-routes
9.2.2、vyos-ce {#9-2-2-vyos-ce}
show ip bgp neighbors 100.64.1.1 received-routes
十、ping/tracert测试 {#十-ping-tracert测试}
10.1、pe->-ce {#10-1-pe---ce}
sudo ping 20.20.20.20 -c 4
sudo traceroute 20.20.20.20
10.2、ce->-pe {#10-2-ce---pe}
sudo ping 10.10.10.10 -c 4
sudo traceroute 10.10.10.10