AWS で OpenVPN(EasyRSA-3.0.1)

更新日2016-12-18 (日) 15:46:36
AWS
------------------------------------------        ---------------------------
| セキュリティグループ                   |        |セキュリティグループ     |
|  (Public)                              |        |  (Private)              |
| -----------------------                |        |                         |
| | Redhat 7.3          |                |        |                         |
| | (OpenVPN)           |プライベートIP  |        |                         |
| | IP 192.168.48.1     |172.31.20.242---+--------+-----(172.31.16.0/20)    |
| |                     |                |        |                         |
| | Elastic IP          |                |        |                         |
| -----------------------                |        ---------------------------
|      |                                 |
-------+---------------------------------|
       |     
       |
   Internet
       |
       |プライベート
-------+--------------------------------
|      |                               |
|  OpenVPN クライアント                |
|  192.168.48.21                       |
|  IP:192.168.10.46                    |
|                                      |
|   プライベート空間                   |
|  (192.168.10.0/24)   PC:192.168.10.47|
|                                      |
----------------------------------------

AWSの設定

  • OpenVPNサーバにElastic IPを割り振る
  • プライベート空間のグローバルIPをAWSのセキュリティグループに届くように設定
  • OpenVPNサーバのネットワークインターフェイスの「送信元/送信先の変更チェック」を無効にする。

ElasticIP.png

送信元送信先の変更無効化.png

OpenVPN

サーババージョン確認

$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.2 (Maipo)

OpenVPNインストール事前準備

$ sudo yum install wget
$ sudo yum -y install openssl-devel pam-devel

LZOインストール

https://openvpn.net/index.php/open-source/downloads.html#lzoからDL

$ wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.09.tar.gz

GCCインストール

$ sudo yum install autoconf gcc-c++
$ tar zxvf lzo-2.09.tar.gz
$ cd lzo-2.09

$ ./configure --prefix=/usr --enable-shared --docdir=/usr/share/doc/lzo-2.09
$ make 
$ sudo make install

Libraries have been installed in:
   /usr/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the 'LD_RUN_PATH' environment variable
     during linking
   - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to '/etc/ld.so.conf'


----------------------------------------

OpenVPNインストール

$ wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.9.tar.gz

$ mkdir (作業ディレクトリ)
$ cd ..
$ tar zxvf openvpn-2.3.9.tar.gz
$ cd openvpn-2.3.9/
$ ./configure
$ make
$ sudo make install

$ sudo mkdir /etc/openvpn
$ sudo cp sample/sample-config-files/server.conf /etc/openvpn/

EasyRSA-3.0.1インストール

$cd ..
$ wget https://github.com/OpenVPN/easy-rsa/releases/download/3.0.1/EasyRSA-3.0.1.tgz
$ tar zxvf EasyRSA-3.0.1.tgz

$ sudo mv EasyRSA-3.0.1 /etc/openvpn/

$ cd /etc/openvpn/EasyRSA-3.0.1

初期化(OpenVPNインストール後最初の1回のみ)

$ sudo ./easyrsa init-pki

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/EasyRSA-3.0.1/pki

CA証明書・秘密鍵作成

$ sudo ./easyrsa build-ca
Generating a 2048 bit RSA private key
.........................+++
............+++
writing new private key to '/etc/openvpn/EasyRSA-3.0.1/pki/private/ca.key.T81WRVeU0u'
Enter PEM pass phrase:je******  ←(A)

-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:AWS CA

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/EasyRSA-3.0.1/pki/ca.crt
$ sudo cp pki/ca.crt /etc/openvpn/

サーバー証明書・秘密鍵作成

$ sudo ./easyrsa build-server-full server nopass
Generating a 2048 bit RSA private key
.......................................+++
..+++
writing new private key to '/etc/openvpn/EasyRSA-3.0.1/pki/private/server.key.uiuZmsq5xh'
-----
Using configuration from /etc/openvpn/EasyRSA-3.0.1/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/EasyRSA-3.0.1/pki/private/ca.key:(A)と同じ
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :PRINTABLE:'server'
Certificate is to be certified until Jun 16 20:45:53 2026 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

サーバー証明書をOpenVPN設定ファイル格納ディレクトリへコピー

$ sudo cp pki/issued/server.crt /etc/openvpn/

サーバー秘密鍵をOpenVPN設定ファイル格納ディレクトリへコピー

sudo cp pki/private/server.key /etc/openvpn/

DHパラメータ作成

$ sudo ./easyrsa gen-dh
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 /etc/openvpn/EasyRSA-3.0.1/pki/dh.pem

DHパラメータをOpenVPN設定ファイル格納ディレクトリへコピー

$ sudo cp pki/dh.pem /etc/openvpn/

ダミーのクライアント証明書作成

$ sudo  ./easyrsa build-client-full dummy nopass
Generating a 2048 bit RSA private key
.............+++
.....+++
writing new private key to '/etc/openvpn/EasyRSA-3.0.1/pki/private/dummy.key.yJzwGfPI49'
-----
Using configuration from /etc/openvpn/EasyRSA-3.0.1/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/EasyRSA-3.0.1/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :PRINTABLE:'dummy'
Certificate is to be certified until Jun 16 20:54:52 2026 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

ダミーのクライアント証明書廃止

$ sudo ./easyrsa revoke dummy


Please confirm you wish to revoke the certificate with the following subject:

subject=
    commonName                = dummy


Type the word 'yes' to continue, or any other input to abort.
  Continue with revocation: yes
Using configuration from /etc/openvpn/EasyRSA-3.0.1/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/EasyRSA-3.0.1/pki/private/ca.key:
Revoking Certificate 02.
Data Base Updated

IMPORTANT!!!

Revocation was successful. You must run gen-crl and upload a CRL to your
infrastructure in order to prevent the revoked cert from being accepted.

証明書廃止リストを作成

$ sudo ./easyrsa gen-crl
Using configuration from /etc/openvpn/EasyRSA-3.0.1/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/EasyRSA-3.0.1/pki/private/ca.key:

An updated CRL has been created.
CRL file: /etc/openvpn/EasyRSA-3.0.1/pki/crl.pem

証明書廃止リストをOpenVPN設定ファイル格納ディレクトリへコピー
$ sudo cp ./pki/crl.pem /etc/openvpn/

証明書廃止リストへ参照権限付加

$ cd ..
-rw-------. 1 root     root       650 Jun 19 05:58 crl.pem
$ sudo chmod o+r crl.pem
-rw----r--. 1 root     root       650 Jun 19 05:58 crl.pem

OpenVPN(サーバ側)設定

TLS認証鍵をOpenVPN設定ファイルを格納ディレクトリへ作成

$ sudo /usr/local/sbin/openvpn --genkey --secret /etc/openvpn/ta.key

/etc/openvpn/server.conf

 proto tcp
;;proto udp

;dev tap →ブリッジVPN
dev tun  →ルーティングVPN


## ca ca.crt
ca /etc/openvpn/ca.crt
## cert server.crt
cert /etc/openvpn/server.crt
## key server.key  # This file should be kept secret
key /etc/openvpn/server.key  # This file should be kept secret

## dh dh2048.pem
dh /etc/openvpn/dh.pem

##server 10.8.0.0 255.255.255.0
server 192.168.48.0 255.255.255.0

push "route 172.31.16.0 255.255.240.0"
;;push "route 192.168.48.0 255.255.255.0"
 
 ;client-config-dir ccd
client-config-dir ccd

;クライアントで1ユーザで複数のPCを接続する設定
;routeはカーネルからOpenVPNサーバー(TUNインターフェイス経由)でのルート設定に使用される設定
;route 192.168.40.128 255.255.255.248
route 192.168.10.0 255.255.255.0


;クライアントで1ユーザで複数のPCを接続する設定
;client-to-client
client-to-client


tls-auth /etc/openvpn/ta.key 0

user nobody
group nobody

log-append  /var/log/openvpn.log

(最終行に)
management localhost 7505
crl-verify crl.pem

最終行へ以下を追加(OpenVPN経由でSambaへのアクセスがエラーになる場合)

fragment 1280
mssfix 1280
link-mtu 1400

/etc/openvpn/ccd/aws-user2

ifconfig-push 192.168.48.21 192.168.48.22
;クライアントで1ユーザで複数のPCを接続する設定
;;OpenVPNサーバーからリモートクライアントでのルート設定
iroute 192.168.10.0 255.255.255.0

起動

$ sudo /usr/local/sbin/openvpn /etc/openvpn/server.conf
  • OS起動時起動
    • /etc/rc.d/rc.local
/usr/local/sbin/openvpn --cd /etc/openvpn/ --config server.conf &
$ sudo chmod u+x rc.local

OpenVPN設定(クライアント側)[作業はサーバで行う]

クライアント 鍵と証明書の生成

$ cd /etc/openvpn/EasyRSA-3.0.1

$ sudo ./easyrsa build-client-full aws-user
Generating a 2048 bit RSA private key
...............................................................................
...............................................................................
......................................+++
..............+++
writing new private key to '/etc/openvpn/EasyRSA-3.0.1/pki/private/aws-user.key.rUvZtXVGxK'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
Using configuration from /etc/openvpn/EasyRSA-3.0.1/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/EasyRSA-3.0.1/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :PRINTABLE:'aws-user'
Certificate is to be certified until Jun 16 21:12:20 2026 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

接続時パスワードなしユーザ作成

$ sudo ./easyrsa build-client-full aws-user2 nopass
Generating a 2048 bit RSA private key
.........................+++
..............................................................................+++
writing new private key to '/etc/openvpn/EasyRSA-3.0.1/pki/private/aws-user2.key.1uCtGvo872'
-----
Using configuration from /etc/openvpn/EasyRSA-3.0.1/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/EasyRSA-3.0.1/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :PRINTABLE:'aws-user2'
Certificate is to be certified until Jun 16 21:14:50 2026 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

クライアントユーザの表示

*sudo less EasyRSA-3.0.1/pki/index.txt
V       260616204553Z           01      unknown /CN=server
R       260616205452Z   160618205626Z   02      unknown /CN=dummy
V       260616211220Z           03      unknown /CN=aws-user
V       260616211450Z           04      unknown /CN=aws-user2

Windows Client側の設定

OpenVPNフォルダのconfigフォルダに openvpn/EasyRSA-3.0.1/pki/issued/aws-user2.crt, openvpn/EasyRSA-3.0.1/pki/private/aws-user2.key, openvpn/ca.crt, openvpn/ta.keyをコピーする

aws.ovpn

;dev tap
dev tun

;dev tap
dev tun

;remote my-server-2 1194
remote ec2-52-196-230-193.ap-northeast-1.compute.amazonaws.com 1194


ca ca.crt
cert aws-user2.crt
key aws-user2.key
## cert okada.crt
## key okada.key


;;ns-cert-type server
remote-cert-tls server

Configを指定したショートカット

C:\Usr\OpenVPN\bin\openvpn-gui-1.0.3.exe --config_dir C:\Usr\OpenVPN\config_aws

LinuxClient

  • /etc/openvpn/aws-user2.conf
client
proto tcp
dev tun
remote ec2-52-196-230-193.ap-northeast-1.compute.amazonaws.com 1194
ca /etc/openvpn/ca.crt
cert /etc/openvpn/aws-user2.crt
key /etc/openvpn/aws-user2.key
tls-auth /etc/openvpn/ta.key 1
;;ns-cert-type server
remote-cert-tls server
resolv-retry infinite
nobind
comp-lzo
persist-key
persist-tun

Routeの設定

OpenVPN server

$ sudo vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

$ sudo sysctl -p

$ sudo route add -net 192.168.10.0 gw 192.168.48.1 netmask 255.255.255.0 metric 1

Privateのサーバ

C:\Users\Administrator>route add 192.168.48.0 mask 255.255.255.0 172.31.20.242 metric 1

Routerの設定

すべてのクライアントから利用できるようにルータを設定

ルータ設定.png

192.168.48.0のルートはOpenVPN Server自身からのパケットは192.168.48.1がソースになるのでこの戻り先が必要なため

確認

IP:192.168.10.47クライアントから

C:\Windows\system32>ping 172.31.29.40

172.31.29.40 に ping を送信しています 32 バイトのデータ:
172.31.29.40 からの応答: バイト数 =32 時間 =20ms TTL=126
172.31.29.40 からの応答: バイト数 =32 時間 =21ms TTL=126

IP:172.31.20.242(OpenVPN server)

$ sudo tcpdump -i tun0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
01:45:21.828148 IP ip-192-168-10-47.ap-northeast-1.compute.internal > ip-172-31\
-29-40.ap-northeast-1.compute.internal: ICMP echo request, id 1, seq 49, length 40
01:45:21.828841 IP ip-172-31-29-40.ap-northeast-1.compute.internal > ip-192-168\
-10-47.ap-northeast-1.compute.internal: ICMP echo reply, id 1, seq 49, length 40
01:45:22.823965 IP ip-192-168-10-47.ap-northeast-1.compute.internal > ip-172-31\
-29-40.ap-northeast-1.compute.internal: ICMP echo request, id 1, seq 50, length 40
01:45:22.824870 IP ip-172-31-29-40.ap-northeast-1.compute.internal > ip-192-168\
-10-47.ap-northeast-1.compute.internal: ICMP echo reply, id 1, seq 50, length 40

pmeからppkに変更

Winscpが利用できるようにpmeからppkに変更

Puttyインストールフォルダの「puttygen.exe」を実行

pem2ppk.png

pem2ppk2.png

pem2ppk3.png

エラー

以下のようなエラー対策

クライアントで今まで動作していたのに出た。サーバも同じエラーのとき同じ対策で良いかも。

  • エラー内容
    # /usr/sbin/openvpn /etc/openvpn/aws-user2.conf
    (略)
    Wed Sep 21 18:22:10 2016 [server] Peer Connection Initiated with 52.196.230.193:1194
    Wed Sep 21 18:22:11 2016 Note: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)
    Wed Sep 21 18:22:11 2016 Note: Attempting fallback to kernel 2.2 TUN/TAP interface
    Wed Sep 21 18:22:11 2016 Cannot allocate TUN/TAP dev dynamically
    Wed Sep 21 18:22:11 2016 Exiting
  • 対策
    # mkdir net
    # mknod /dev/net/tun c 10 200
  • rc.local以下のように設定

[ ! -e (fileパス) ]; then → (fileパス)がないとき

[ ! -e (dirパス) ]; then → (dirパス)がないとき

##Openvpn Client
if [ ! -d /dev/net ]; then
    /bin/mkdir /dev/net
fi
if [ ! -e /dev/net/tun ]; then
    /bin/mknod /dev/net/tun c 10 200
fi
/usr/sbin/openvpn /etc/openvpn/aws-user2.conf &

参考


添付ファイル: filepem2ppk3.png 86件 [詳細] filepem2ppk2.png 78件 [詳細] filepem2ppk.png 79件 [詳細] fileルータ設定.png 82件 [詳細] file送信元送信先の変更無効化.png 86件 [詳細] fileElasticIP.png 95件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-12-18 (日) 15:46:36 (673d)