IBM Cloud VPC의 가상 서버에 OpenVPN으로 연결

7190 단어 ibmcloudvpcOpenVPN

목적



IBM Cloud의 가상 서버에 VPN을 연결하려는 경우 클래식 인프라에서 SSL-VPN을 표준으로 사용할 수 있었지만 VPC에서는 작동하지 않습니다. 따라서 VPC에서 클래식 인프라처럼 VPN 연결을 원하면 클래식 인프라의 가상 서버에 VPN 먼지에 원격으로 로그인하고 Transit Gateway를 통해 VPC의 가상 서버에 원격으로 액세스합니다. 합니다. 그것은 번거롭기 때문에 VPC의 가상 서버에 OpenVPN을 설정하고 연결할 수 있도록 해보십시오.

VPC에는 VPN Gateway가 있지만 IPsec VPN에서 사이트 간 연결에 사용하기 때문에 개인 사용자의 VPN 연결로 사용하기가 어렵습니다.

절차



서버 전제


  • OS: Red Hat Enterprise Linux 8
  • 공용 IP: 부동 IP 부여됨
  • 인증 :/etc/passwd에 의한 로컬 인증

  • OpenVPN 설치



    EPEL 리포지토리를 활성화하고 OpenVPN 및 EasyRSA를 설치합니다.
    # dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm  
    # dnf -y install easy-rsa openvpn
    

    IP 포워딩 활성화



    /etc/sysctl.d/ipv4-ip-forward.conf
    net.ipv4.ip_forward = 1
    
    # sysctl --system
    

    PKI 설정



    초기화


    # /usr/share/easy-rsa/3/easyrsa init-pki
    
    init-pki complete; you may now create a CA or requests.
    Your newly created PKI dir is: /root/pki
    

    CA 만들기


    # /usr/share/easy-rsa/3/easyrsa build-ca
    Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
    
    Enter New CA Key Passphrase:     # パスフレーズ
    Re-Enter New CA Key Passphrase:  # パスフレーズ(確認)
    Generating RSA private key, 2048 bit long modulus (2 primes)
    ........................................+++++
    ...................................................................................................................+++++
    e is 65537 (0x010001)
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Common Name (eg: your user, host, or server name) [Easy-RSA CA]:Example CA  # 名前
    
    CA creation complete and you may now import and sign cert requests.
    Your new CA certificate file for publishing is at:
    /root/pki/ca.crt
    

    DH 만들기


    # /usr/share/easy-rsa/3/easyrsa gen-dh
    Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
    Generating DH parameters, 2048 bit long safe prime, generator 2
    This is going to take a long time
    .............................................
    
    DH parameters of size 2048 created at /root/pki/dh.pem
    

    서버 키 및 인증서 작성


    nopass 붙이는 것으로 키의 패스 프레이즈를 없애 줍니다.
    # /usr/share/easy-rsa/3/easyrsa build-server-full server nopass
    Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
    Generating a RSA private key
    ........................................................................................................................................................+++++
    ......+++++
    writing new private key to '/root/pki/easy-rsa-8951.WNkyCo/tmp.2IbkNL'
    -----
    Using configuration from /root/pki/easy-rsa-8951.WNkyCo/tmp.LtjSs2
    Enter pass phrase for /root/pki/private/ca.key:  # CA作成時のパスフレーズ
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    commonName            :ASN.1 12:'server'
    Certificate is to be certified until Jan  2 01:24:37 2023 GMT (825 days)
    
    Write out database with 1 new entries
    Data Base Updated
    

    공유 키 생성



    클라이언트에 배포할 공유 키를 생성합니다. 이것을 사용하지 않을 수도 있지만, 신뢰할 수있는 사람 만 연결할 수 있도록 이번에는 사용합니다 (단, 공유 키를 안전하게 사용자에게 전달하는 메커니즘이 필요합니다).
    #  openvpn --genkey --secret pki/ta.key
    

    서버 설정



    생성한 것을 배치합니다.
    # cp pki/ca.crt pki/ta.key pki/private/server.key pki/issued/server.crt /etc/openvpn/server/
    # cp pki/dh.pem /etc/openvpn/server/dh2048.pem
    

    구성 파일의 편지지를 복사합니다.
    # cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/server.conf        
    

    필요한 설정을 합니다.

    /etc/openvpn/server/server.conf
    
    # VPNで使用するアドレスレンジ(他で使っているものと重複しないこと)
    server 192.168.255.0 255.255.255.0
    
    # VPNを通して直接通信可能にするVPC内のネットワーク
    push "route 10.244.0.0 255.255.255.0"
    
    # /etc/passwdでユーザー認証・クライアント証明書は使わない(行末に追加)
    plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
    client-cert-not-required
    username-as-common-name
    

    서버 시작


    # systemctl enable openvpn-server@server
    # systemctl start openvpn-server@server
    

    1194/udp 허가



    Firewalld 및 VPC ACL 보안 그룹에서 1194/udp 인바운드를 허용합니다.

    VPN 클라이언트



    설치



    Windows 사용자의 경우 OpenVPN 클라이언트는 vpnux Client가 매우 간단합니다. 아래 사이트에서 설치합니다.

    htps //w w. vp 없음 x. jp/

    CA 인증서 및 공유 키 얻기



    방금 서버에서 만든
  • ca.crt
  • ta.key

  • 안전한 방법으로 얻으십시오.

    프로필 만들기



    클라이언트를 시작하고 프로파일을 작성합니다.


  • VPN 서버 : VPN 서버의 부동 IP
  • CA 인증서 : ca.crt 등록
  • TLS-Auth HMAC 서명 사용 : 확인
  • 공유 키 : ta.key 등록
  • ID/비밀번호 인증 : VPN 서버의 OS 사용자 설정

  • 연결



    연결합니다.



    연결 확인



    자체 PC에서 VPC의 서브넷으로 통신할 수 있습니다.
    $ ping 10.244.0.4  # OpenVPNサーバ
    PING 10.244.0.4 (10.244.0.4) 56(84) bytes of data.
    64 bytes from 10.244.0.4: icmp_seq=1 ttl=64 time=10.4 ms
    64 bytes from 10.244.0.4: icmp_seq=2 ttl=64 time=12.8 ms
    ...
    
    $ ssh ****@10.244.0.4
    ****@10.244.0.4's password:
    [****@**** ~]$
    

    그러나 이대로는 OpenVPN 서버 이외와는 통신할 수 없습니다.
    $ ping 10.244.0.19
    (応答なし)
    

    OpenVPN 서버 이외와도 통신을 하고 싶은 경우는, OpenVPN 클라이언트로부터의 통신(192.168.255.0.24)을 NAT 하는 것으로 회피할 수 있습니다.

    /etc/nftables/openvpn-nat.nft
    #!/usr/sbin/nft -f
    
    table ip nat {
      chain PREROUTING {
        type nat hook prerouting priority -100; policy accept;
      }
      chain INPUT {
        type nat hook input priority 100; policy accept;
      }
      chain POSTROUTING {
        type nat hook postrouting priority 100; policy accept;
        oifname "eth0" ip saddr 192.168.255.0/24 counter packets 1 bytes 84 masquerade
      }
      chain OUTPUT {
        type nat hook output priority -100; policy accept;
      }
    }
    

    /etc/sysconfig/nftables.conf
    # 行追加
    include "/etc/nftables/openvpn-nat.nft"
    

    덧붙여서 iptables의 경우는 이하의 커멘드에 해당합니다.
    $iptables -A POSTROUTING -o eth0 -t nat -s 192.168.255.0/24 -j MASQUERADE

    이제 VPC의 다른 호스트와 통신할 수 있습니다.
    $ ping 10.244.0.19
    PING 10.244.0.19 (10.244.0.19) 56(84) bytes of data.
    64 bytes from 10.244.0.19: icmp_seq=1 ttl=63 time=9.37 ms
    64 bytes from 10.244.0.19: icmp_seq=2 ttl=63 time=9.56 ms
    

    이상입니다.

    좋은 웹페이지 즐겨찾기