
# 示例：使用OpenSwan配置云上云下互通
#### 操作场景
云端在VPC中购买了VPN网关和连接，云下客户使用主机安装IPsec软件与云端对接，客户主机在出口网络进行了一对一的NAT映射。
#### 拓扑连接
本场景拓扑连接及策略协商配置信息如[图 拓扑连接及策略协商配置信息]所示。
云上VPC的VPN网关IP：11.11.11.11，本地子网：192.168.200.0/24。
客户主机NAT映射IP：22.22.22.22，本地子网：192.168.222.0/24。
云端ECS与客户主机的本地IP地址分别为192.168.200.200和192.168.222.222。
VPN连接的协商参数使用华为云缺省配置。
图1拓扑连接及策略协商配置信息   
![](https://support.huaweicloud.com/admin-vpn/figure/zh-cn_image_0000001542493758.png "点击放大")
#### 配置步骤
本示例以在CentOs6.8中配置Openswan IPsec客户端为例进行介绍。
1. 执行以下命令，安装Openswan客户端。 
   **yum install -y openswan**
   
   
2. 执行以下命令，开启IPv4转发。 
   **vim /etc/sysctl.conf**
   1. 在配置文件中增加如下内容：
      ```
      net.ipv4.ip_forward = 1
      ```
      
   
   2. 执行以下命令，使转发配置参数生效。 **/sbin/sysctl -p**
      
   
   
   
   
3. 执行以下命令，查询iptables配置，确认关闭firewall或允许数据流转发。 
   **iptables -L**
   ```
   iptables -L
       Chain INPUT (policy ACCEPT)
       target     prot opt source               destination 
       Chain FORWARD (policy ACCEPT)
       target     prot opt source               destination 
       Chain OUTPUT (policy ACCEPT)
       target     prot opt source               destination
   ```
   
   
4. 执行以下命令，配置预共享密钥。 
   **vim /etc/ipsec.d/open_IPsec.secrets**
   在配置文件中增加如下内容：
   ```
   22.22.22.22 11.11.11.11 : psk "IPsec-key"
   ```
   格式：本地用于连接的IP+空格+远端网关IP+空格+英文冒号+空格+PSK+预共享密钥，冒号的两边都有空格，PSK大小写均可，密钥用英文双引号。
   
   
5. 执行以下命令，IPsec连接配置。 
   **vim /etc/ipsec.d/open_IPsec.conf**
   在配置文件中增加如下内容：
   ```
   conn openswan_IPsec                 # 定义连接名称为openswan_IPsec
     type=tunnel                       # 开启隧道模式
     auto=start                        # 可选择add、route和start
     
     left=192.168.222.222              # 本地IP，nat场景选择真实的主机地址
     leftid=22.22.22.22                # 本地标识ID
     leftsourceip=22.22.22.22          # 如果存在nat，源地址选择nat后的IP
     leftsubnet=192.168.222.0/24       # 本地子网
     leftnexthop=22.22.22.1            # nat场景下一跳选择nat后的网关IP
     right=11.11.11.11                 # 远端VPN网关IP 
     rightid=11.11.11.11               # 远端标识ID
     rightsourceip=11.11.11.11         # 远端源地址选择VPN网关IP
     rightsubnet=192.168.200.0/24      # 远端子网
     rightnexthop=%defaultroute        # 远端路由按缺省配置
    
     authby=secret                     # 定义认证方式为PSK
     keyexchange=ike                   # ike密钥交换方式
     ike=aes128-sha1;modp1536          # 按照对端配置定义ike阶段算法和group
     ikev2=never                       # 关闭IKEv2版本
     ikelifetime=86400s                # ike阶段生命周期
     
     phase2=esp                        # 二阶段传输格式
     phase2alg=aes128-sha1;modp1536    # 按照对端配置定义IPsec阶段算法和group，modp1536=DH group 5
     pfs=yes                           # 开启PFS
     compress=no                       # 关闭压缩
     salifetime=3600s                  # 二阶段生命周期
   ```
   ![](https://support.huaweicloud.com/admin-vpn/public_sys-resources/note_3.0-zh-cn.png)
   - 在NAT穿越场景中可按需配置forceencaps=yes。
   
   - 华为云VPN使用的DH-group对应的比特位详细请参见[华为云VPN使用的DH-group对应的比特位是多少？](https://support.huaweicloud.com/vpn_faq/vpn_08_0223.html)。
    
   执行以下命令，进行配置项校验。
   ipsec verify
   如果回显信息全部为OK时，表示配置成功。
   ```
   ipsec verify
   Verifying installed system and configuration files
   Version check and IPsec on-path                             [OK]
   Libreswan 3.25 (netkey) on 3.10.0-957.5.1.el7.x86_64
   Checking for IPsec support in kernel                                 [OK]
    NETKEY: Testing XFRM related proc values
            ICMP default/send_redirects              [OK]
            ICMP default/accept_redirects            [OK]
            XFRM larval drop                         [OK]
   Pluto IPsec.conf syntax                           [OK]
   Two or more interfaces found, checking IP forwarding[OK]
   Checking rp_filter                                [OK]
   Checking that pluto is running                    [OK]
    Pluto listening for IKE on udp 500               [OK]
    Pluto listening for IKE/NAT-T on udp 4500        [OK]
    Pluto IPsec.secret syntax                        [OK]
   Checking 'ip' command                             [OK]
   Checking 'iptables' command                       [OK]
   Checking 'prelink' command does not interfere with FIPS[OK]
   Checking for obsolete IPsec.conf options          [OK]
   ```
   若回显信息出现如下报错：
   ```
   Checking rp_filter                                  [ENABLED]
    /proc/sys/net/ipv4/conf/default/rp_filter          [ENABLED]
    /proc/sys/net/ipv4/conf/lo/rp_filter               [ENABLED]
    /proc/sys/net/ipv4/conf/eth0/rp_filter             [ENABLED]
    /proc/sys/net/ipv4/conf/eth1/rp_filter             [ENABLED]
    /proc/sys/net/ipv4/conf/ip_vti01/rp_filter             [ENABLED]
   ```
   通过如下命令解决：
   ```
   echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
   echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter
   echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
   echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
   echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter
   echo 0 > /proc/sys/net/ipv4/conf/ip_vti01/rp_filter
   ```
   
   
6. 执行以下命令，启动服务。 
   **service ipsec stop** # 关闭服务
   **service ipsec start** # 启动服务
   **service ipsec restart** # 重启服务
   **ipsec auto --down openswan_IPsec** # 关闭连接
   **ipsec auto --up openswan_IPsec** # 开启连接
   ![](https://support.huaweicloud.com/admin-vpn/public_sys-resources/note_3.0-zh-cn.png)
   每次修改配置都需要重启服务，并重新开启连接。
   
   
 
#### 配置验证
执行以下命令，查询IPsec的状态。
**ipsec --status**
结果显示如下信息（摘录）。
```
Connection list:
000  
000 "openswan_IPsec": 192.168.222.0/24===192.168.222.222<192.168.222.222>[22.22.22.22]---22.22.22.1...11.11.11.11<11.11.11.11>===192.168.200.0/24; erouted; eroute owner: #30
000 "openswan_IPsec":     oriented; my_ip=22.22.22.22; their_ip=11.11.11.11; my_updown=IPsec _updown;
000 "openswan_IPsec":   xauth us:none, xauth them:none,  my_username=[any]; their_username=[any]
000 "openswan_IPsec":   our auth:secret, their auth:secret
000 "openswan_IPsec":   modecfg info: us:none, them:none, modecfg policy:push, dns:unset, domains:unset, banner:unset, cat:unset;
000 "openswan_IPsec":   labeled_IPsec:no;
000 "openswan_IPsec":   policy_label:unset;
000 "openswan_IPsec":   ike_life: 86400s; IPsec_life: 3600s; replay_window: 32; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0;
000 "openswan_IPsec":   retransmit-interval: 500ms; retransmit-timeout: 60s;
000 "openswan_IPsec":   initial-contact:no; cisco-unity:no; fake-strongswan:no; send-vendorid:no; send-no-esp-tfc:no;
000 "openswan_IPsec":   policy: PSK+ENCRYPT+TUNNEL+PFS+UP+IKEV1_ALLOW+SAREF_TRACK+IKE_FRAG_ALLOW+ESN_NO;
000 "openswan_IPsec":   conn_prio: 24,24; interface: eth0; metric: 0; mtu: unset; sa_prio:auto; sa_tfc:none;
000 "openswan_IPsec":   nflog-group: unset; mark: unset; vti-iface:unset; vti-routing:no; vti-shared:no; nic-offload:auto;
000 "openswan_IPsec":   our idtype: ID_IPV4_ADDR; our id=1.1.1.1; their idtype: ID_IPV4_ADDR; their id=2.2.2.2
000 "openswan_IPsec":   dpd: action:hold; delay:0; timeout:0; nat-t: encaps:auto; nat_keepalive:yes; ikev1_natt:both
000 "openswan_IPsec":   newest ISAKMP SA: #3; newest IPsec SA: #30;
000 "openswan_IPsec":   IKE algorithms: AES_CBC_128-HMAC_SHA1-MODP1536
000 "openswan_IPsec":   IKE algorithm newest: AES_CBC_128-HMAC_SHA1-MODP1536
000 "openswan_IPsec":   ESP algorithms: AES_CBC_128-HMAC_SHA1_96-MODP1536
000 "openswan_IPsec":   ESP algorithm newest: AES_CBC_128-HMAC_SHA1_96; pfsgroup=MODP1536
000  
000 Total IPsec connections: loaded 1, active 1
000  
000 State Information: DDoS cookies not required, Accepting new IKE connections
000 IKE SAs: total(1), half-open(0), open(0), authenticated(1), anonymous(0)
000 IPsec SAs: total(1), authenticated(1), anonymous(0)
000  
000 #3: "openswan_IPsec":4500 STATE_MAIN_R3 (sent MR3, ISAKMP SA established); EVENT_SA_REPLACE in 15087s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0); idle; import:admin initiate
000 #30: "openswan_IPsec":4500 STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 1744s; newest IPsec; eroute owner; isakmp#3; idle; import:admin initiate
000 #30: "openswan_IPsec" esp.b810a24@11.11.11.11 esp.aab7b496@192.168.222.222 tun.0@11.11.11.11 tun.0@192.168.222.222 ref=0 refhim=0 Traffic: ESPin=106KB ESPout=106KB! ESPmax
=4194303B
```
