OCIで簡単な環境を作ってみた(その1)

最近Oracle環境を構築する検証をすることになったので、
あくまで自分用にメモを残しておく。

# 作りたい環境

* VPNを経由したプライベートサブネット
* アプリケーションWebサーバ(以下Server) + Base Databaseサービスの連携

たったこれだけの簡単な環境を構築する。
そもそもAWSの検証ばかりだったのでOCIの検証目的となります。

今回はVPNサーバの作成と接続までとなります。


# 構成図
![ga検証環境.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767488/30d38126-0add-2dab-228e-fbc0f006f8ac.png)

AWSでいうクライアントVPNのような軽い検証をしたいのだが、
マネージドされたVPNサービスがないためマーケットプレイスか自作になる。

Linuxではそんなに難しくないので、OPEN VPNを利用した
VPNサーバ自作することにする。

VPN接続あとはServerへ接続するため、
10.0.1.0/24のサブネットに変換されるよう構築します。

# ネットワークの用意

AWSでいうVPCはVPNとなる。
これを作成するとデフォルトでデフォルト・ルート表というものが作成される。

また、セキュリティリストというものも作成される。
AWS慣れしているとわかりにくい箇所があったので、記載しておく

* VPNとサブネット、そして仮想サーバのVNIC単位でセキュリティをかけられる
* どこか一つでも許可があれば通信は通る
* VPNとサブネットはセキュリティ・リスト
* VNICやロードバランサーはネットワークセキュリティグループを利用する

とてもめんどくさいので都度確認する。

また、サブネットを作る前には各々セキュリティリストを作成しておかないと、
変更ができない。
※ルート表(ルートテーブル)は後で変更が可能。


今回はセキュリティリストで対応していく。

構成図にある程度IPは記載しているので、
セキュリティリストの内容を記載する。
ちなみにステートレスにすると戻り通信が返ってこないのでステートフルにする。

* Pubulic List
* Praivate List A
* Praivate List B


## Pubulic List

<table>
  <caption>イングレス・ルール</caption>
  <thead>
    <tr>
      <th>ステートレス</th> <th>ソース</th> <th>IPプロトコル</th> <th>範囲</th>
    </tr>
  </thead>
  <tr>
    <td> いいえ </td> <td>10.0.0.0/16</td> <td> TCP </td> <td> ALL </td>
  </tr>
  <tr>
    <td> いいえ </td> <td>10.0.0.0/16</td> <td> ICMP </td> <td> ALL </td>
  </tr>
    <tr>
    <td> いいえ </td> <td>自宅IP</td> <td> ICMP </td> <td> ALL </td>
  </tr>
   
  <tr>
    <td> いいえ </td> <td>自宅IP</td> <td> すべてのプロトコル </td> <td> ALL </td>
  </tr>

</table>


<table>
  <caption>エグレス・ルール</caption>
  <thead>
    <tr>
      <th>ステートレス</th> <th>宛先</th> <th>IPプロトコル</th> <th>範囲</th>
    </tr>
  </thead>
  <tr>
    <td> いいえ </td> <td>10.0.0.0/16</td> <td> TCP </td> <td> ALL </td>
  </tr>
  <tr>
    <td> いいえ </td> <td>10.0.0.0/16</td> <td> ICMP </td> <td> ALL </td>
  </tr>
    <tr>
    <td> いいえ </td> <td>0.0.0.0/0</td> <td> すべてのプロトコル </td> <td> ALL </td>
  </tr>

</table>

## Praivate List A

<table>
  <caption>イングレス・ルール</caption>
  <thead>
    <tr>
      <th>ステートレス</th> <th>ソース</th> <th>IPプロトコル</th> <th>範囲</th>
    </tr>
  </thead>
  <tr>
    <td> いいえ </td> <td>10.0.0.0/16</td> <td> TCP </td> <td> ALL </td>
  </tr>
  <tr>
    <td> いいえ </td> <td>10.0.0.0/16</td> <td> ICMP </td> <td> ALL </td>


</table>



<table>
  <caption>エグレス・ルール</caption>
  <thead>
    <tr>
      <th>ステートレス</th> <th>宛先</th> <th>IPプロトコル</th> <th>範囲</th>
    </tr>
  </thead>
  <tr>
    <td> いいえ </td> <td>0.0.0.0/0	</td> <td> TCP </td> <td> ALL </td>
  </tr>
  <tr>
    <td> いいえ </td> <td>10.0.0.0/16</td> <td> ICMP </td> <td> ALL </td>


</table>


## Praivate List B

<table>
  <caption>イングレス・ルール</caption>
  <thead>
    <tr>
      <th>ステートレス</th> <th>ソース</th> <th>IPプロトコル</th> <th>範囲</th>
    </tr>
  </thead>
  <tr>
    <td> いいえ </td> <td>10.0.0.0/16</td> <td> TCP </td> <td> ALL </td>
  </tr>




</table>



<table>
  <caption>エグレス・ルール</caption>
  <thead>
    <tr>
      <th>ステートレス</th> <th>宛先</th> <th>IPプロトコル</th> <th>範囲</th>
    </tr>
  </thead>
  <tr>
    <td> いいえ </td> <td>0.0.0.0/0	</td> <td> TCP </td> <td> ALL </td>
  </tr>



</table>


# インターネットゲートウェイ
OCIでもそこまでは変わらない。

作成後、Piblic Subnetのルートテーブルの双方に設定する。



* Public Subnetのルートテーブルに設定をする
VCN内はデフォルトでルーティングが組まれているため、
新たに許可を追加しなくてもローカル通信は通る。
絞る必要があるのであればサブネット以下から設定を推奨する。

対象のサブネットであるPublic Subnetのルート・ルールを追加する。
![g.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767488/ffcb4dce-6ff5-6f1b-2080-9769c451ad0d.png)


# VPNサーバ構築



下記の記事を参考にさせていただく。


■参考記事
https://qiita.com/horus19761108/items/9c7879149218d9325c5e

今回はAlmaLinux8で行う。

SELINUXは無効化しておく。
※これがあると起動しない。
```
[root@vpn-server ~]# getenforce
Disabled
[root@vpn-server ~]#
```

```ruby:OS

[root@vpn-server ~]# cat /etc/os-release
NAME="AlmaLinux"
VERSION="8.9 (Midnight Oncilla)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.9"
PLATFORM_ID="platform:el8"
PRETTY_NAME="AlmaLinux 8.9 (Midnight Oncilla)"
ANSI_COLOR="0;34"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:almalinux:almalinux:8::baseos"
HOME_URL="https://almalinux.org/"
DOCUMENTATION_URL="https://wiki.almalinux.org/"
BUG_REPORT_URL="https://bugs.almalinux.org/"

ALMALINUX_MANTISBT_PROJECT="AlmaLinux-8"
ALMALINUX_MANTISBT_PROJECT_VERSION="8.9"
REDHAT_SUPPORT_PRODUCT="AlmaLinux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.9"
```

8用のepelをインストール
```ruby:epel
[root@vpn-server ~]# yum localinstall https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noa
rch.rpm
Last metadata expiration check: 14:45:47 ago on Wed 10 Apr 2024 10:22:15 AM UTC.
epel-release-latest-8.noarch.rpm                                      37 kB/s |  25 kB     00:00
Dependencies resolved.
=====================================================================================================
 Package                   Architecture        Version               Repository                 Size
=====================================================================================================
Installing:
 epel-release              noarch              8-19.el8              @commandline               25 k

Transaction Summary
=====================================================================================================
Install  1 Package

Total size: 25 k
Installed size: 35 k
Is this ok [y/N]: y
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                             1/1
  Installing       : epel-release-8-19.el8.noarch                                                1/1
  Running scriptlet: epel-release-8-19.el8.noarch                                                1/1
Many EPEL packages require the CodeReady Builder (CRB) repository.
It is recommended that you run /usr/bin/crb enable to enable the CRB repository.

  Verifying        : epel-release-8-19.el8.noarch                                                1/1

Installed:
  epel-release-8-19.el8.noarch

Complete!
```

Firewalldが動いているが、上位のセキュリティリストによって絞られているから停止しておく。

```ruby:停止
自動起動停止
[root@vpn-server ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

停止
[root@vpn-server ~]# systemctl stop  firewalld
[root@vpn-server ~]#

```
OpneVPNなどをインストール
```ruby:インストール

[root@vpn-server ~]# dnf --enablerepo=epel  install openvpn easy-rsa
Last metadata expiration check: 0:23:26 ago on Thu 11 Apr 2024 01:22:49 AM UTC.
Dependencies resolved.
========================================================================================================================================================
 Package                                 Architecture                     Version                                  Repository                      Size
========================================================================================================================================================
Installing:
 easy-rsa                                noarch                           3.0.8-1.el8                              epel                            47 k
 openvpn                                 x86_64                           2.4.12-2.el8                             epel                           545 k
Installing dependencies:
 pkcs11-helper                           x86_64                           1.22-7.el8                               epel                            64 k

Transaction Summary
========================================================================================================================================================
Install  3 Packages

Total download size: 657 k
Installed size: 1.5 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): easy-rsa-3.0.8-1.el8.noarch.rpm                                                                                   95 kB/s |  47 kB     00:00
(2/3): openvpn-2.4.12-2.el8.x86_64.rpm                                                                                  1.0 MB/s | 545 kB     00:00
(3/3): pkcs11-helper-1.22-7.el8.x86_64.rpm                                                                              112 kB/s |  64 kB     00:00
--------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                   499 kB/s | 657 kB     00:01
Extra Packages for Enterprise Linux 8 - x86_64                                                                          1.6 MB/s | 1.6 kB     00:00
Importing GPG key 0x2F86D6A1:
 Userid     : "Fedora EPEL (8) <epel@fedoraproject.org>"
 Fingerprint: 94E2 79EB 8D8F 25B2 1810 ADF1 21EA 45AB 2F86 D6A1
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
Is this ok [y/N]: y
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                1/1
  Installing       : pkcs11-helper-1.22-7.el8.x86_64                                                                                                1/3
  Running scriptlet: openvpn-2.4.12-2.el8.x86_64                                                                                                    2/3
  Installing       : openvpn-2.4.12-2.el8.x86_64                                                                                                    2/3
  Running scriptlet: openvpn-2.4.12-2.el8.x86_64                                                                                                    2/3
  Installing       : easy-rsa-3.0.8-1.el8.noarch                                                                                                    3/3
  Running scriptlet: easy-rsa-3.0.8-1.el8.noarch                                                                                                    3/3
  Verifying        : easy-rsa-3.0.8-1.el8.noarch                                                                                                    1/3
  Verifying        : openvpn-2.4.12-2.el8.x86_64                                                                                                    2/3
  Verifying        : pkcs11-helper-1.22-7.el8.x86_64                                                                                                3/3

Installed:
  easy-rsa-3.0.8-1.el8.noarch                      openvpn-2.4.12-2.el8.x86_64                      pkcs11-helper-1.22-7.el8.x86_64

Complete!
```



3.0.8が最新で入っていることを確認
```ruby:改めて確認
[root@vpn-server ~]# ll /usr/share/easy-rsa/
total 0
lrwxrwxrwx. 1 root root  5 Sep 10  2020 3 -> 3.0.8
lrwxrwxrwx. 1 root root  5 Sep 10  2020 3.0 -> 3.0.8
drwxr-xr-x. 3 root root 66 Apr 11 01:46 3.0.8
```

設定ファイルのコピーと確認
```ruby:領域のコピー
[root@vpn-server ~]# mkdir /etc/openvpn/easy-rsa
[root@vpn-server ~]# cp /usr/share/easy-rsa/3.0.8/* /etc/openvpn/easy-rsa/ -R

[root@vpn-server ~]# ll /etc/openvpn/easy-rsa/
total 84
-rwxr-xr-x. 1 root root 76946 Apr 11 01:51 easyrsa
-rw-r--r--. 1 root root  4616 Apr 11 01:51 openssl-easyrsa.cnf
drwxr-xr-x. 2 root root   122 Apr 11 01:51 x509-types

[root@vpn-server ~]# ll /usr/share/easy-rsa/3.0.8/
total 84
-rwxr-xr-x. 1 root root 76946 Sep  9  2020 easyrsa
-rw-r--r--. 1 root root  4616 Sep  9  2020 openssl-easyrsa.cnf
drwxr-xr-x. 2 root root   122 Apr 11 01:46 x509-types
[root@vpn-server ~]#

```

初期化
```ruby:初期化
[root@vpn-server ~]# cd /etc/openvpn/easy-rsa
[root@vpn-server easy-rsa]#


[root@vpn-server easy-rsa]# ll
total 84
-rwxr-xr-x. 1 root root 76946 Apr 11 01:51 easyrsa
-rw-r--r--. 1 root root  4616 Apr 11 01:51 openssl-easyrsa.cnf
drwxr-xr-x. 2 root root   122 Apr 11 01:51 x509-types
[root@vpn-server easy-rsa]#


[root@vpn-server easy-rsa]# ./easyrsa init-pki

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

[root@vpn-server easy-rsa]# ll /etc/openvpn/easy-rsa/pki
total 16
-rw-------. 1 root root 4616 Apr 11 01:53 openssl-easyrsa.cnf
drwx------. 2 root root    6 Apr 11 01:53 private
drwx------. 2 root root    6 Apr 11 01:53 reqs
-rw-------. 1 root root 4640 Apr 11 01:53 safessl-easyrsa.cnf

```

認証局の作成
```ruby:
[root@vpn-server easy-rsa]# ./easyrsa build-ca
Using SSL: openssl OpenSSL 1.1.1k  FIPS 25 Mar 2021

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]:OCIVPNTEST #任意の名前

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


```

生成された鍵を確認
```ruby:ca.cr
[root@vpn-server easy-rsa]# ll /etc/openvpn/easy-rsa/pki/ca.crt
-rw-------. 1 root root 1200 Apr 11 01:55 /etc/openvpn/easy-rsa/pki/ca.cr

```

DHパラメータの作成
```ruby:DHパラメータの作成

[root@vpn-server easy-rsa]# ./easyrsa gen-dh
Using SSL: openssl OpenSSL 1.1.1k  FIPS 25 Mar 2021
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/easy-rsa/pki/dh.pem


[root@vpn-server easy-rsa]# ll /etc/openvpn/easy-rsa/pki/dh.pem
-rw-------. 1 root root 424 Apr 11 01:59 /etc/openvpn/easy-rsa/pki/dh.pem

```

サーバ用の証明書と秘密鍵の作成

```ruby:サーバ用の証明書と秘密鍵の作成

[root@vpn-server easy-rsa]# ./easyrsa build-server-full server_r nopass
Using SSL: openssl OpenSSL 1.1.1k  FIPS 25 Mar 2021
Generating a RSA private key
..+++++
........................................................................+++++
writing new private key to '/etc/openvpn/easy-rsa/pki/easy-rsa-1842.WlCYCW/tmp.G6Ehv2'
-----
Using configuration from /etc/openvpn/easy-rsa/pki/easy-rsa-1842.WlCYCW/tmp.Bz3C3z
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: #認証局の作成で使用したパスワード
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server_r'
Certificate is to be certified until Jul 15 02:01:03 2026 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

[root@vpn-server easy-rsa]#
```

生成されたサーバ証明書と秘密鍵を確認

```ruby:サーバ用の証明書
[root@vpn-server easy-rsa]# ll /etc/openvpn/easy-rsa/pki/issued/server_r.crt
-rw-------. 1 root root 4614 Apr 11 02:01 /etc/openvpn/easy-rsa/pki/issued/server_r.crt
```


```ruby:秘密鍵
[root@vpn-server easy-rsa]# ll /etc/openvpn/easy-rsa/pki/private/server_r.key
-rw-------. 1 root root 1704 Apr 11 02:00 /etc/openvpn/easy-rsa/pki/private/server_r.key
```

クライアント用の証明書と秘密鍵の作成
```ruby:クライアント用の証明書と秘密鍵の作成
[root@vpn-server easy-rsa]# ./easyrsa build-client-full client1 nopass
Using SSL: openssl OpenSSL 1.1.1k  FIPS 25 Mar 2021
Generating a RSA private key
........................................+++++
...........................+++++
writing new private key to '/etc/openvpn/easy-rsa/pki/easy-rsa-1954.CPehFP/tmp.LnIJco'
-----
Using configuration from /etc/openvpn/easy-rsa/pki/easy-rsa-1954.CPehFP/tmp.ZpEkz3
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: #認証局の作成で使用したパスワード
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'client1'
Certificate is to be certified until Jul 15 02:06:55 2026 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

```

生成されたクライアント用の証明書とクライアント用の秘密鍵の確認
```ruby:クライアント用の証明書
[root@vpn-server easy-rsa]# ll /etc/openvpn/easy-rsa/pki/issued/client1.crt
-rw-------. 1 root root 4487 Apr 11 02:06 /etc/openvpn/easy-rsa/pki/issued/client1.crt
```

```ruby:クライアント用の秘密鍵
[root@vpn-server easy-rsa]# ll /etc/openvpn/easy-rsa/pki/private/client1.key
-rw-------. 1 root root 1708 Apr 11 02:06 /etc/openvpn/easy-rsa/pki/private/client1.key
```

OpenVPNの設定
```ruby:サンプルファイルを複製

[root@vpn-server easy-rsa]# cd /etc/openvpn/
[root@vpn-server easy-rsa]#

[root@vpn-server openvpn]# ll
total 0
drwxr-x---. 2 root openvpn  6 Nov 10 00:39 client
drwxr-xr-x. 4 root root    77 Apr 11 01:53 easy-rsa
drwxr-x---. 2 root openvpn  6 Nov 10 00:39 server
[root@vpn-server openvpn]# ll /usr/share/doc/openvpn/sample/sample-config-files/server.conf
-rw-r--r--. 1 root root 10784 Mar 17  2022 /usr/share/doc/openvpn/sample/sample-config-files/server.conf

[root@vpn-server openvpn]# cp  /usr/share/doc/openvpn/sample/sample-config-files/server.conf server.conf
[root@vpn-server openvpn]#

[root@vpn-server openvpn]# ll
total 12
drwxr-x---. 2 root openvpn     6 Nov 10 00:39 client
drwxr-xr-x. 4 root root       77 Apr 11 01:53 easy-rsa
drwxr-x---. 2 root openvpn     6 Nov 10 00:39 server
-rw-r--r--. 1 root root    10784 Apr 11 02:12 server.conf

```

```ruby:バックアップと編集
[root@vpn-server openvpn]# cp -ip server.conf server.conf_org
[root@vpn-server openvpn]#

[root@vpn-server openvpn]# vi server.conf
```

下記を参考にさせていただいた

https://qiita.com/ghost-dog/items/841ae9418c248ca854de






```ruby:設定内容を確認

[root@vpn-server ~]# cat /etc/openvpn/server/server.conf |grep -v -e '^\s*#' -e'^\s*$' |grep -v ^";"
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server_r.crt
key /etc/openvpn/easy-rsa/pki/private/server_r.key  # This file should be kept secret
dh /etc/openvpn/easy-rsa/pki/dh.pem
server 10.0.8.0 255.255.255.0  #接続元に10.0.0.0/24のネットワークからIPを振る
ifconfig-pool-persist ipp.txt
push "route 10.0.1.0 255.255.255.0" 
client-to-client
keepalive 10 300
tls-auth /etc/openvpn/ta.key 0 # This file is secret
cipher AES-256-CBC
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
log         /var/log/openvpn.log
log-append  /var/log/openvpn.log
verb 3
explicit-exit-notify 1
[root@vpn-server ~]#
```

```ruby:変更点
[root@vpn-server ~]# diff -y /etc/openvpn/server/server.conf /etc/openvpn/server.conf_org  |grep "|"
ca /etc/openvpn/easy-rsa/pki/ca.crt                           | ca ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server_r.crt            | cert server.crt
key /etc/openvpn/easy-rsa/pki/private/server_r.key  # This fi | key server.key  # This file should be kept secret
dh /etc/openvpn/easy-rsa/pki/dh.pem                           | dh dh2048.pem
server 10.0.8.0 255.255.255.0                                 | server 10.8.0.0 255.255.255.0
;server-bridge 10.0.1.0 255.255.255.0 10.8.0.50 10.8.0.100    | ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
;server-bridge 10.0.0.0 255.255.255.0 10.0.0.200 10.0.0.230   | ;server-bridge
;push "route 192.168.0.0 255.255.255.0"                       | ;push "route 192.168.10.0 255.255.255.0"
push "route 10.0.1.0 255.255.255.0"                           | ;push "route 192.168.20.0 255.255.255.0"
client-to-client                                              | ;client-to-client
keepalive 10 300                                              | keepalive 10 120
tls-auth /etc/openvpn/ta.key 0 # This file is secret          | tls-auth ta.key 0 # This file is secret
comp-lzo                                                      | ;comp-lzo
user nobody                                                   | ;user nobody
group nobody                                                  | ;group nobody
status /var/log/openvpn-status.log                            | status openvpn-status.log
log         /var/log/openvpn.log                              | ;log         openvpn.log
log-append  /var/log/openvpn.log                              | ;log-append  openvpn.log
```

中でもこれが大事。ちゃんとしたエラーログを吐かせないとうまくいかないときの原因調査で全然時間がかかる。
log         /var/log/openvpn.log
log-append  /var/log/openvpn.log

TLS認証キーの作成
```ruby:TLS認証キーの作成
[root@vpn-server openvpn]# openvpn --genkey --secret /etc/openvpn/ta.key

[root@vpn-server openvpn]# ll /etc/openvpn/ta.key
-rw-------. 1 root root 636 Apr 11 02:50 /etc/openvpn/ta.key

```

この後、ディレクトリ /etc/openvpn/server へ、必要なファイルを移動させる

```
[root@vpn-server ~]# ll /etc/openvpn/server
total 20
-rw------- 1 root root    17 Apr 22 16:17 ipp.txt
-rw-r--r-- 1 root root 10980 Apr 22 15:56 server.conf
-rw------- 1 root root   636 Apr 19 18:46 ta.key
```

このディレクトリからserver.confを読み込まれる。
ta.keyはserver.confで絶対パスで/etc/openvpn/ta.keyへと指定しているので不要
ipp.txtは指定があるのでここに必要になる。

ただし、絶対パスで指定すれば別
```
[root@vpn-server ~]# cat /etc/openvpn/server/server.conf |grep ipp.txt
ifconfig-pool-persist ipp.txt
```

上記で設定している証明書類はすべてServerディレクトリに置けば要はそのままできる。



IPフォワードの設定
```ruby:net.ipv4.ip_forward = 1
[root@vpn-server ~]# vi /etc/sysctl.conf
[root@vpn-server ~]# cat /etc/sysctl.conf |grep -v -e '^\s*#' -e '^\s*$'
net.ipv4.ip_forward=1

・反映
[root@vpn-server ~]# sysctl -p
net.ipv4.ip_forward = 1

```

iptablesコマンドを実行して、NAT（マスカレード）ルールを追加
```ruby:設定前確認
[root@vpn-server ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

```
```ruby:設定投入と確認
[root@vpn-server ~]# iptables -t nat -A POSTROUTING -s 10.0.8.0/24 -o eth0 -j MASQUERADE
[root@vpn-server ~]# 

[root@vpn-server ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  10.0.8.0/24          anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
```

設定ファイルを指定して起動テスト
```ruby:起動テスト
[root@vpn-server ~]# openvpn /etc/openvpn/server/server.conf
[root@vpn-server ~]#
```
ログ確認
```ruby:ログ確認

[root@vpn-server openvpn]# less /var/log/openvpn.log
Thu Apr 11 18:31:13 2024 OpenVPN 2.4.12 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Nov 10 2023
Thu Apr 11 18:31:13 2024 library versions: OpenSSL 1.1.1k  FIPS 25 Mar 2021, LZO 2.08
Thu Apr 11 18:31:13 2024 Diffie-Hellman initialized with 2048 bit key
Thu Apr 11 18:31:13 2024 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Apr 11 18:31:13 2024 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Apr 11 18:31:13 2024 ROUTE_GATEWAY 10.0.0.1/255.255.255.0 IFACE=eth0 HWADDR=02:00:17:02:e6:1e
Thu Apr 11 18:31:13 2024 TUN/TAP device tun0 opened
Thu Apr 11 18:31:13 2024 TUN/TAP TX queue length set to 100
Thu Apr 11 18:31:13 2024 /sbin/ip link set dev tun0 up mtu 1500
Thu Apr 11 18:31:13 2024 /sbin/ip addr add dev tun0 local 10.0.0.1 peer 10.0.0.2
Thu Apr 11 18:31:13 2024 /sbin/ip route add 10.0.0.0/24 via 10.0.0.2
Thu Apr 11 18:31:13 2024 Could not determine IPv4/IPv6 protocol. Using AF_INET
Thu Apr 11 18:31:13 2024 Socket Buffers: R=[212992->212992] S=[212992->212992]
Thu Apr 11 18:31:13 2024 UDPv4 link local (bound): [AF_INET][undef]:1194
Thu Apr 11 18:31:13 2024 UDPv4 link remote: [AF_UNSPEC]
Thu Apr 11 18:31:13 2024 GID set to nobody
Thu Apr 11 18:31:13 2024 UID set to nobody
Thu Apr 11 18:31:13 2024 MULTI: multi_init called, r=256 v=256
Thu Apr 11 18:31:13 2024 IFCONFIG POOL: base=10.0.0.4 size=62, ipv6=0
Thu Apr 11 18:31:13 2024 IFCONFIG POOL LIST
Thu Apr 11 18:31:13 2024 Initialization Sequence Completed

```


Initialization Sequence Completed
がでているのでOK




起動
```ruby:起動
[root@vpn-server ~]# systemctl start openvpn-server@server
[root@vpn-server ~]#

[root@vpn-server ~]# systemctl status openvpn-server@server
● openvpn-server@server.service - OpenVPN service for server
   Loaded: loaded (/usr/lib/systemd/system/openvpn-server@.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2024-04-11 18:46:24 JST; 36min ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
 Main PID: 5822 (openvpn)
   Status: "Initialization Sequence Completed"
    Tasks: 1 (limit: 50260)
   Memory: 1.0M
   CGroup: /system.slice/system-openvpn\x2dserver.slice/openvpn-server@server.service
           mq5822 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --cipher AES-256-GCM --ncp-ciphers AES-256-GCM:>

Apr 11 18:46:24 vpn-server systemd[1]: Starting OpenVPN service for server...
Apr 11 18:46:24 vpn-server systemd[1]: Started OpenVPN service for server.


```

■作業端末にClientツールを導入する

下記を参考にさせていただきました。
https://qiita.com/horus19761108/items/86c4ae1f44707d5d847e

下記からダウンロード
https://www.vpnux.jp/download

インストールの際はバージョンは2.6を選択します。




あらかじめ必要なファイルを再確認しておきます。



■中間証明書
/etc/openvpn/easy-rsa/pki/ca.crt


■クライアントサーバ証明書
/etc/openvpn/easy-rsa/pki/issued/client1.crt

■クライアント秘密鍵
/etc/openvpn/easy-rsa/pki/private/client1.key

上記ファイルを開きメモしておく。


設定は下記のように設定
![プロファイル.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767488/45381ec4-c8cf-165a-89bf-8f04bd333af7.png)


TUNドライバはWinTunを指定しなければ接続に失敗します。




接続ができたことをクライアント側でも確認します。
```ruby:クライアント側の確認
C:\Users\81803>ipconfig

Windows IP 構成


イーサネット アダプター イーサネット:

   メディアの状態. . . . . . . . . . . .: メディアは接続されていません
   接続固有の DNS サフィックス . . . . .:

不明なアダプター OpenVPN Wintun:

   接続固有の DNS サフィックス . . . . .:
   リンクローカル IPv6 アドレス. . . . .: fe80::c553:61e6:88f8:c934%50
   IPv4 アドレス . . . . . . . . . . . .: 10.0.8.6
   サブネット マスク . . . . . . . . . .: 255.255.255.252
   デフォルト ゲートウェイ . . . . . . .:

不明なアダプター ローカル エリア接続 2:

   メディアの状態. . . . . . . . . . . .: メディアは接続されていません
   接続固有の DNS サフィックス . . . . .:

Wireless LAN adapter ローカル エリア接続* 1:

   メディアの状態. . . . . . . . . . . .: メディアは接続されていません
   接続固有の DNS サフィックス . . . . .:

Wireless LAN adapter ローカル エリア接続* 2:

   メディアの状態. . . . . . . . . . . .: メディアは接続されていません
   接続固有の DNS サフィックス . . . . .:

Wireless LAN adapter Wi-Fi:

   接続固有の DNS サフィックス . . . . .:
   IPv4 アドレス . . . . . . . . . . . .: 192.168.0.25
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 192.168.0.1

```


一旦serverだけ立てて疎通確認

```
C:\Users\81803>ping 10.0.1.149

10.0.1.149 に ping を送信しています 32 バイトのデータ:
10.0.1.149 からの応答: バイト数 =32 時間 =13ms TTL=63
10.0.1.149 からの応答: バイト数 =32 時間 =12ms TTL=63
10.0.1.149 からの応答: バイト数 =32 時間 =13ms TTL=63

10.0.1.149 の ping 統計:
    パケット数: 送信 = 3、受信 = 3、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 12ms、最大 = 13ms、平均 = 12ms
Ctrl+C
^C
C:\Users\81803>
```
対象サーバへローカルIPで接続できたことを確認。

SSHも接続できた。
```
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Thu Apr 25 11:30:32 2024 from 自宅IP
[opc@server ~]$ sudo su -
Last login: Thu Apr 25 11:30:35 JST 2024 on pts/0
[root@server ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc fq_codel state UP group default qlen 1000
    link/ether 02:00:17:00:b4:fb brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    inet 10.0.1.149/24 brd 10.0.1.255 scope global dynamic noprefixroute eth0
       valid_lft 76895sec preferred_lft 76895sec
    inet6 fe80::17ff:fe00:b4fb/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[root@server ~]#

```


長くなったので、次の工程は下記で行います。
https://qiita.com/Cache-Hit/items/e1830cafe52f20366c45