

# 在 RDS Custom for Oracle 主实例和副本实例之间配置 VPN 隧道
<a name="cfo-standby-vpn-tunnel"></a>

VPN 隧道是通过网络在两个或更多个设备之间建立的加密连接。为了确保 RDS Custom for Oracle 中的 Oracle Data Guard 实例具有最高级别的安全性，我们强烈建议您实施 VPN 隧道来对主实例与备用实例之间的通信进行加密。该隧道在实例之间进行网络传输时，可保护敏感数据。虽然此配置是可选的，但我们建议将其作为实现数据安全性和法规合规性的最佳实践。

请确保满足以下先决条件：
+ 您拥有主要主机和备用主机的根访问权限。
+ 您拥有运行 `ipsec` 命令的技术专业知识。

**在 RDS Custom for Oracle 中配置主副本之间的 VPN 隧道**

1. 使用以下规则将主实例和备用实例的安全组添加到允许列表中：

   ```
   ACTION FLOW SOURCE PROTO PORT
   
   ALLOW ingress this-SG 50 (ESP) all (N/A)
   ALLOW egress this-SG 50 (ESP) all (N/A)
   
   ALLOW ingress this-SG 17 (UDP) 500 (IKE)
   ALLOW egress this-SG 17 (UDP) 500 (IKE)
   ```

1. 切换到根用户。

   ```
   $ sudo su – root
   ```

1. 在主实例和备用实例上运行以下命令，以初始化用户 `root` 下的网络安全服务（NSS）数据库。

   ```
   ipsec initnss --nssdir /etc/ipsec.d
   ```

1. 按如下方式生成 RSA 密钥：

   1. 在主实例上，使用以下任一 `ipsec` 命令生成密钥，具体取决于您的操作系统版本。

      ```
      ipsec newhostkey --nssdir /etc/ipsec.d       ## for Oracle Linux Version 8
      ipsec newhostkey --output /etc/ipsec.secrets ## for Oracle Linux version 7.9
      ```

   1. 获取创建配置所需的公有密钥。在以下示例中，主实例是 `left`，因为在 `ipsec` 术语中，`left` 是指您当前正在配置的设备，而 `right` 是指隧道另一端的设备。

      ```
      ipsec showhostkey --left --ckaid ckaid-returned-in-last-statement
      ```

   1. 在备用实例上，为备用实例生成密钥。

      ```
      ipsec newhostkey --nssdir /etc/ipsec.d       ## for Oracle Linux Version 8
      ipsec newhostkey --output /etc/ipsec.secrets ## for Oracle Linux version 7.9
      ```

   1. 获取备用实例的公有密钥，创建配置时需要该公有密钥。在以下示例中，备用实例为 `right`，因为它指的是隧道另一端的设备。

      ```
      ipsec showhostkey --right --ckaid ckaid-returned-in-last-statement
      ```

1. 根据您获得的 RSA 密钥生成配置。主实例与备用实例的配置相同。您可以在 AWS 控制台中找到主实例 IPv4 地址和备用实例 IPv4 地址。

   在主实例和备用实例上，将以下配置保存到文件 `/etc/ipsec.d/custom-fb-tunnel.conf` 中。

   ```
   conn custom-db-tunnel
    type=transport
    auto=add
    authby=rsasig
    left=IPV4-for-primary 
    leftrsasigkey=RSA-key-generated-on-primary
    right=IPV4-for-standby
    rightrsasigkey=RSA-key-generated-on-standby
   ```

1. 在主实例和备用实例上，在两台主机上启动 `ipsec` 进程守护程序。

   ```
   ipsec setup start
   ```

1. 在主实例或备用实例上启动隧道。该输出值应该类似于以下内容。

   ```
   [root@ip-172-31-6-81 ~]# ipsec auto --up custom-db-tunnel
   181 "custom-db-tunnel" #1: initiating IKEv2 connection
   181 "custom-db-tunnel" #1: sent IKE_SA_INIT request to 172.31.32.196:500
   182 "custom-db-tunnel" #1: sent IKE_AUTH request {cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_512 group=DH19}
   003 "custom-db-tunnel" #1: initiator established IKE SA; authenticated peer '3584-bit PKCS#1 1.5 RSA with SHA1' signature using preloaded certificate '172.31.32.196'
   004 "custom-db-tunnel" #2: initiator established Child SA using #1; IPsec transport [172.31.6.81-172.31.6.81:0-65535 0] -> [172.31.32.196-172.31.32.196:0-65535 0] {ESP/ESN=>0xda9c4815 <0xb742ca42 xfrm=AES_GCM_16_256-NONE DPD=passive}
   [root@ip-172-31-6-81 ~]#
   ```