実践Linux
RockyLinux8        RockyLinux8 目次へ  TOP(HOME)へ


OpenVPNサーバー   2021年8月





openVPN (2.4.11-1)のインストール
OpenVPNは、SSL/TLSプロトコルを使用したSSL VPN=証明書と秘密鍵を生成し、公開鍵認証を行う。
サーバーとの接続はtunデバイスを経由して行う(すなわちレイヤ3のルーティング方式で行う。tapはレイヤ2でブリッジ方式の場合使用する。一般には、ルーティング方式が推奨されているようだ)。

●必要なもの
・OpenSSL
・LZO圧縮(リアルタイムでデータを圧縮・展開)
・pam
以上は、インストール済み。
確認
# dnf list installed | grep openssl
# dnf list installed | grep lzo
# dnf list installed | grep pam

・TUN/TAPデバイス   これもインストール済み。
TUN/TAPデバイスがカーネルモジュールとしてインストールされていれば(/dev/net/tun)、わざわざカーネルを作り直す必要はない。
# modprobe tun として、エラーが出なければカーネルモジュールが入っているので、それを使えばよい。
# modprobe tun 自身の実行は、openvpnの起動スクリプトで自動的になされるようになっているので、通常はあえて実行する必要はない。

●EPELリポジトリの追加(これはすでに導入済:AWStats参照)
OpenVPNの入手には、外部レポジトリの追加(EPEL)が必要となる。


●OpenVPNのインストール
EPELからOpenVPNをインストール
# dnf --enablerepo=epel -y install openvpn easy-rsa net-tools
net-toolsはすでにインストールされていた。


認証局の構築と鍵の生成
# cd /usr/share/easy-rsa/3   バージョン3で動かす
# ./easyrsa init-pki   初期化
# ./easyrsa build-ca   認証局の設立
 任意のパスフレーズを設定 適当なパスワードを設定
 Common Name (eg: your user, host, or server name) [Easy-RSA CA]:Server-CA (認証局の名前を設定)
 認証局用の秘密鍵「ca.key」と証明書「ca.crt」が作成される。

鍵と証明書を生成して署名(鍵にパスワードはつけない)
「vpnserver1」「vpnclient1」等の箇所は任意の名称でOK(証明書のファイル名や commonName 等に設定される)
OpenVPNサーバ用の証明書と秘密鍵を作成
 # ./easyrsa build-server-full vpnserver1 nopass
   認証局の作成で設定したパスフレーズで応答
   「nopass」を設定することでサーバの秘密鍵からパスワードを削除することができる。
   vpnserver1.crtとvpnserver1.keyができる。
クライアント用秘密鍵と証明書を作成
 # ./easyrsa build-client-full vpnclient1 nopass
   vpnclient1.crtとvpnclient1.keyができる。

Diffie Hellman(DH)パラメーター生成
# ./easyrsa gen-dh   DH鍵交換用の素数を生成=./pki/dh.pemができる。

tls-authを使用するために共有鍵ta.keyを生成
# openvpn --genkey --secret ./pki/ta.key

各証明書類を/etc/openvpn/server/にコピー
# cp -pR /usr/share/easy-rsa/3/pki/{issued,private,ca.crt,dh.pem,ta.key} /etc/openvpn/server/


サーバーの設定
サンプル設定ファイルをコピーしておく。
# cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/

/etc/openvpn/server/server.conf  (OpenVPN設定ファイルの編集)

port 1194    32行目 リスンするポート
proto udp    プロトコルは基本的にUDPを使用(TCPは使わない)
dev tun     tunモードで動かす
ca ca.crt    78行目 認証局証明書のパス
cert issued/vpnserver1.crt    変更 サーバー証明書のパス
key private/vpnserver1.key    変更 サーバー鍵の場所
dh dh.pem     85行目 変更 DH鍵交換用のファイルを指定
server 10.8.0.0 255.255.255.0     101行目 VPNで使用するネットワークを指定(ローカルネットワークと重複しなければ何でもOK)
push "route 192.168.7.0 255.255.255.0"   142行目 変更 コメント解除してローカルネットワークに変更
client-to-client    クライアント間の通信を許可(必要に応じてコメントアウト)
keepalive 10 120   231行目:キープアライブ (10秒毎に生存確認, 120秒無応答でダウンと判断)
tls-auth ta.key 0   244行目 TLS-Authキーを指定
cipher AES-256-CBC   252行目 暗号化に使用するアルゴリズム
comp-lzo       263行目 コメント解除 (圧縮を有効)
persist-key      281行目〜(persistオプション有効) 最初に読み込んだ鍵ファイルを保持しておく
persist-tun      再起動後にtunデバイスを再起動させない
status /var/log/openvpn-status.log   287行目 ログの保管場所変更
log /var/log/openvpn.log         296行目〜 コメント解除してログの保管場所変更
log-append /var/log/openvpn.log
verb 3      306行目 ログレベルを指定 (0 は fatal errors のみ, 9 は軽微なログまで全て出力)


サービスの起動と自動起動の有効化
# systemctl start openvpn-server@server (一時的)
# systemctl enable openvpn-server@server (自動起動)
# systemctl status openvpn-server@server


Firewalld
# firewall-cmd --add-service=openvpn --zone=external (一時的)
# firewall-cmd --list-ports --zone=external  確認
恒常的に設定するには
# firewall-cmd --add-service=openvpn --zone=external --permanent
# firewall-cmd --reload

VPNクライアントからの全アクセスを許可
# firewall-cmd --add-interface=tun+ --zone=trusted
# firewall-cmd --add-source=10.8.0.0/24 --zone=trusted

IPフォワード(外部からの192.168.7.0/24に対するアクセスとそれに対する対応)
ここではenp0s29は、内部LANへのインターフェイスとする
# firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i tun+ -o enp0s29 -d 192.168.7.0/24 -j ACCEPT
# firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp0s29 -o tun+ -j ACCEPT

IPマスカレードの設定
# firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -s 10.8.0.0/24 -o enp0s29 -j MASQUERADE

なお、内部LAN側インターフェイスにはすでにZONE=trustedが設定済み

VPNクライアントからSamba(ここではVPNと同じサーバーに設置している)へアクセスしたい場合
Samba設定ファイル/etc/samba/smb.confを編集
 interfaces = 10.8.0.0/24 ← 10.8.0.0/24のサブネットのTUNインターフェイスもリッスンするようにする
 hosts allow = 192.168.7. 127. 10.8.0. ← アクセス許可アドレスにVPNを追加


以下のファイルを VPN 接続したいクライアントコンピュータへ

・/etc/openvpn/server/ca.crt   CA証明書
・/etc/openvpn/server/ta.key   TLS認証鍵
・/etc/openvpn/server/issued/vpnclient1.crt   クライアント証明書
・/etc/openvpn/server/private/vpnclient1.key   クライアント秘密鍵



     ↑ アクセスしたい内部PCについては、サーバーからpingが通っているか必ず確認しておくこと。

接続したいwindows10(図では\\192.168.7.20)があったとします。しかし、時間がたてばスリープ状態になりアクセスできなくなります。これを防ぐには、ネットワークアダプターを常にアクティブにしておく必要があります。
デバイスマネージャー > ネットワークアダプター > 当該ネットワークアダプターを右クリックして[プロパティ] > 電源の管理 > [電力節約のために、コンピューターでこのデバイスの電源をオフにできるようにする]のチェックを外し、常にネットワークアダプターを有効にします。


windowsクライアント

●VPNクライアント(vpnux Client)のインストール
https://www.openvpn.jp/download/よりをダウンロード/インストールする。
windows10では「vpnux Client Standard Edition 2.3」、windows7は旧バージョンのvpnux Client 1.4.6をインストール。(2021.8現在)

あらかじめ、サーバーで作成したCA証明書(ca.crt)、クライアント証明書(vpnclient1.crt)、クライアント秘密鍵(vpnclient1.key)、TLS認証鍵(ta.key)をUSBメモリなどにコピーしておく。それぞれ次の設定で読み込むことになる。

●設定
vpnux Clientを起動。
「プロファイル → 編集」で設定をする。
一般設定
 プロファイル名 適当に「vpnclient1」
 VPNサーバー サーバーのIPアドレス
 ポート 1194
 デバイス TUN (ルーティング方式)
 プロトコル UDP
 拡張設定 圧縮を有効にする/LZOを選択
        TLS-Auth HMAC署名を使用 ta.keyを読み込む。(旧バージョンでは詳細設定より)
 認証 CA証明書 ca.crtを読み込む。
     証明書認証(PKI)を使用
      証明書 vpnclient1.crtを読み込む。
      秘密鍵 vpnclient1.keyを読み込む。

●VPNクライアントを起動してSamba(ここではVPNと同じサーバーに設置している)に接続してみる
ネットワークを開いて、「\\10.8.0.1」を入力する。

●ファイル共有もテスト
ネットワークを開いて、「\\192.168.7.20」にアクセスしてみる。

切断するには
右下の∧印より「隠されているインジケータを表示」させ、当該アイコンをダブルクリックする。



TOP(HOME)へ

目 次
HOME
 全体のシステム構成&目次


RockyLinux

RockyLinux8.4のインストール

旧サーバーからのデータ移行

ネットワークの設定ほか
ダイレクトルールを使ったfirewallの強化
DNS(BIND)サーバー
DHCPサーバー
FTPサーバー
FTPS(FTP over SSL/TLS)
Webサーバー
  アクセス解析ツールAwstats
Mail(Dovecot&Postfix)サーバー
MariaDB(MySQL)サーバー
SSHサーバー
SSHトンネル
SSH+MariaDB+Exel
Sambaサーバー
openVPNサーバー
VNCサーバー(リモートディスクトップ)

systemdとfirewalldについて


CentOS8
CentOS7
CentOS5〜6

SELinux

Cプログラミング


●その他
クラウド Amazon EC2
Raspberry Piで遊ぶ
印刷機関連開発
 刷版絵柄面積率測定
 Indesign上にPDF自動配置
数独をExcelで解く


●趣味の世界
相対性理論
量子力学
群論
熱力学・統計力学
解析力学
物理でつかう数学
超弦理論(ノート作成中)


ブログサイトはこちらより