ubutu

ubuntuの操作メモ

3426 views

はじめに

お仕事でちょっとVPN環境を作ってという依頼があり、VPN環境を作ってみましたが、ちょくちょくハマってしまったので、
手順やポイントなどをまとめておきます。

やりたいこと

  • AWS上にubuntu16.04のインスタンスを作成し、openvpnでVPNサーバにする(ubuntu18.04で本手順は失敗します)
  • CAはeasyrsaで簡易的な認証局をVPNサーバー上に作成する
  • クライアント(Windows)にもopenvpnをインストールして複数台接続する
  • VPNサーバに接続したクライアント同士で通信できる
  • ユーザ名とパスワードじゃなくてクライアント証明書で認証する
  • VPNサーバはどうしてもubuntuでやりたい

ようするに下の絵のようなことがやりたい。

対象とする読者

  • VPNの仕組みは知っているが、openvpnを使ったことはない
  • AWSでLinuxインスタンスは作れる
  • AWSのLinuxにログインはできる

AWSに認証局を作ろう

OSはubuntu16.04です。CentOSでも似たようなものなので参考にはなるかと思いますが、適宜コマンドは置き換えて読んでください。
認証局を作るといってもなんちゃって認証局(easy-rsa)です。
作業はほとんどrootでやるので、sudo -iでroot化し、ライブラリをインストールしましょう。

  1. sudo -i
  2. apt-get update
  3. apt-get install openvpn libssl-dev openssl easy-rsa

インストールできたら認証局用のディレクトリを作成します。

  1. make-cadir /etc/openvpn/easy-rsa
  2. cd /etc/openvpn/easy-rsa

上記を実行したあとlsコマンドを実行すると、varsというファイルが出来上がります。
varsファイルを編集します。これは証明書を作成するときのCA自体の情報になります。
viエディタなどで編集します。

  1. vi vars

varsファイルの以下の部分をそれらしい情報に編集します。なんちゃって証明書の元になるだけなので適当でOKです。

  1. export KEY_COUNTRY="JP" #国
  2. export KEY_PROVINCE="KANAGAWA" #都道府県
  3. export KEY_CITY="EBINA" #市
  4. export KEY_ORG="KONISHI" #組織(会社?)
  5. export KEY_EMAIL="konishi@mail.com" #メアド
  6. export KEY_OU="MyOrganizationalUnit" #部署名?

編集できたら、シェルに設定内容を反映します。

  1. source ./vars
  2. ./clean-all

CAの鍵と証明書を作成します。

  1. ./pkitool --initca

実行し、[手順7]のような出力が出れば成功です。

  1. Using CA Common Name: KONISHI CA
  2. Generating a 2048 bit RSA private key
  3. ................................................+++
  4. ....................+++
  5. writing new private key to 'ca.key'

次にDHパラメーターを作成します。

  1. ./build-dh

実行し、正常に動作した場合は以下のような出力が確認できます。

実行後、/etc/openvpn/easy-rsa/keysの下に以下のファイルが作成されているはずです。

  1. ls /etc/openvpn/easy-rsa/keys
  2. ca.crt ca.key dh2048.pem index.txt serial

これで認証局の設定は完了です。

VPNサーバとVPNクライアントの証明書や鍵を作ろう

認証局にVPNのサーバ証明書や鍵を作ってもらいます。

  1. ./pkitool --server server

実行すると、/etc/openvpn/easy-rsa/keysの下に以下のファイルが作成されます。

  • server.crt
  • server.key

静的共有鍵もいるらしいので、[SC手順2]を実行してキーを生成します。

  1. openvpn --genkey --secret ta.key

実行すると、/etc/openvpn/easy-rsaの下にta.keyが作成されます。
これでサーバー側に必要なキーと証明書が作成されたことになります。

VPNサーバの設定をしよう

CAに作ってもらったサーバの鍵をopenvpnのパスに配置します。

  1. cd /etc/openvpn/easy-rsa/keys
  2. cp ca.crt server.crt server.key dh2048.pem /etc/openvpn
  3. cd /etc/openvpn/easy-rsa
  4. cp ta.key /etc/openvpn

VPNサーバの設定を行います。まず、サーバの設定ファイルを用意します。

  1. gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

/etc/openvpn/server.confを編集します。変更箇所に★をつけています。

  1. port 1194
  2. # TCP or UDP server?
  3. proto tcp ★
  4. ;proto udp ★
  5. dev tap ★
  6. ;dev tun ★
  7. ;dev-node MyTap
  8. ca ca.crt
  9. cert server.crt
  10. key server.key # This file should be kept secret
  11. dh dh2048.pem
  12. ;server 10.8.0.0 255.255.255.0
  13. ifconfig-pool-persist ipp.txt
  14. server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
  15. ;server-bridge
  16. ;push "route 192.168.10.0 255.255.255.0"
  17. ;push "route 192.168.20.0 255.255.255.0"
  18. ;client-config-dir ccd
  19. ;route 192.168.40.128 255.255.255.248
  20. ;client-config-dir ccd
  21. ;route 10.9.0.0 255.255.255.252
  22. ;learn-address ./script
  23. ;push "redirect-gateway def1 bypass-dhcp"
  24. ;push "dhcp-option DNS 208.67.222.222"
  25. ;push "dhcp-option DNS 208.67.220.220"
  26. client-to-client ★
  27. ;duplicate-cn
  28. keepalive 10 120
  29. tls-auth ta.key 0 # This file is secret ★
  30. ;cipher BF-CBC # Blowfish (default)
  31. ;cipher AES-128-CBC # AES
  32. ;cipher DES-EDE3-CBC # Triple-DES
  33. cipher AES-256-CBC ★
  34. comp-lzo
  35. ;max-clients 100
  36. ;user nobody
  37. ;group nogroup
  38. persist-key
  39. persist-tun
  40. status openvpn-status.log
  41. log openvpn.log ★
  42. ;log-append openvpn.log
  43. verb 3
  44. ;mute 20

ファイアウォールの設定

本設定ではSSLのポート番号を使用してVPN接続を行います。
AWSのセキュリティグループ、ubuntu自体のファイアウォールでポート1194を通過できるように設定します。

AWSでの設定

インスタンスに該当するセキュリティグループを選択し、以下のようにインバウンドの設定で1194を通過できるようにします。
図は443を開けていますが、1194に変更したほうがよいっぽいです。

ubuntuでの設定

ubuntuの場合、デフォルトではファイアウォールは無効なはずですが、AWSのインスタンスは有効になっているものもある?みたいです。
以下のコマンドを実行してinactiveになっている場合は設定不要です。

  1. ufw status

activeだった場合は次のようにして1194を通過できるようにします。

  1. ufw allow 1194
  2. ufw reload
  3. ufw status

openvpnの起動

以下のコマンドでopenvpnを起動します。

  1. service openvpn@server start

/etc/openvpn/openvpn.logにログが出力されます。次のコマンドを実行して
ログを確認してください。

  1. cat /etc/openvpn/openvpn.log

以下のメッセージが出力されていれば起動できています。

  1. Sun Aug 12 11:32:29 2018 Initialization Sequence Completed

VPNクライアントの設定をしよう

openvpnをダウンロードします。
ダウンロード先はここのURLです。
https://openvpn.net/index.php/open-source/downloads.html
以下の赤枠で囲んでいるopenvpn_install-2.4.6-1602.exeをダウンロードします。

インストールはインストーラーが表示するデフォルトを選択していけばOKです。

インストールが完了したら、VPNサーバでクライアント認証用のキーと証明書を作成します。
TeraTermなどでVPNサーバにログインし、次のコマンドを実行します。

  1. sudo -i
  2. cd /etc/openvpn/easy-rsa
  3. ./pkitool mycli1(1台目のクライアントのキーと証明書作成)
  4. ./pkitool mycli2(2台目のクライアントのキーと証明書作成)

クライアントのopenvpnに必要な認証ファイル、キーファイルは以下です。

  • ca.crt
  • mycli1.crt(1台目の場合)
  • mycli1.key(1台目の場合)
  • mycli2.crt(2台目の場合)
  • mycli2.key(2台目の場合)
  • ta.key

これらのファイルをVPNサーバからWindowsにダウンロードします。 ダウンロードする際、ファイルのパーミッションが足りず、ダウンロードできないファイルがあるので 次のようにファイルをホームディレクトリにコピーし、こちらをダウンロードします。

  1. cp /etc/openvpn/easy-rsa/keys/ca.crt /home/ubuntu
  2. cp /etc/openvpn/easy-rsa/keys/mycli1.crt /home/ubuntu
  3. cp /etc/openvpn/easy-rsa/keys/mucli1.key /home/ubuntu
  4. cp /etc/openvpn/easy-rsa/keys/mycli2.crt /home/ubuntu
  5. cp /etc/openvpn/easy-rsa/keys/mucli2.key /home/ubuntu
  6. cp /etc/openvpn/easy-rsa/ta.key /home/ubuntu
  7. chmod 777 /home/ubuntu/ca.crt
  8. chmod 777 /home/ubuntu/mycli1.crt
  9. chmod 777 /home/ubuntu/mycli1.key
  10. chmod 777 /home/ubuntu/mycli2.crt
  11. chmod 777 /home/ubuntu/mycli2.key
  12. chmod 777 /home/ubuntu/ta.key

TermTermを使用する場合、[ファイル]→[SSH_SCP]を使用してファイルをダウンロードできます(下図参照)。

[SSH_SCP]をクリックすると下図のダイアログが表示されるので、赤枠の部分にファイル名を入力してダウンロードします。

ダウンロードができたら以下のファイルは削除します。

  1. rm /home/ubuntu/ca.crt
  2. rm /home/ubuntu/mycli1.crt
  3. rm /home/ubuntu/mycli1.key
  4. rm /home/ubuntu/mycli2.crt
  5. rm /home/ubuntu/mycli2.key
  6. rm /home/ubuntu/ta.key

C:\Users\<ユーザー名>\OpenVPN\configに次のファイルを配置しましょう。
PCごとにクライアントのキーと証明書は異なる必要があります。
(同じにしてしまうと、本設定ではみんな同じIPアドレスが割り当たってしまう)

[1台目のPC]

  1. ca.crt
  2. mycli1.crt
  3. mycli1.key
  4. ta.key

[2台目のPC]

  1. ca.crt
  2. mycli2.crt
  3. mycli2.key
  4. ta.key

次にC:\Program Files\OpenVPN\sample-config\client.ovpnファイルを
C:\Users\<ユーザー名>\OpenVPN\configにコピーし、編集します。
変更するパラメーターを以下に記します。

  1. dev tap
  2. ;dev tun
  3. proto tcp
  4. ;proto udp
  5. remote ec2-xx-xx-xx-xx.compute-1.amazonaws.com 1194 ★xx-xx-xx-xxはAWSのホスト名
  6. cert mycli1.crt
  7. key mycli1.key
  8. comp-lzo

編集終了後、デスクトップに表示されるopenvpnのアイコンを[右クリック]→[管理者として実行]を選択して起動します。
下図参照。

タスクバーにopenvpnのアイコンが表示されます。
openvpnのアイコンをダブルクリックするか、右クリックしたあと、「接続」を選択するとつながります。

Page 2 of 9.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626