OpenVPNのオプションについて

OS: Ubuntu Server 16.04
OpenVPN 2.4.5

設定に使用したオプションが一体どういう意味を持つのか今ひとつ呑み込めていないけれども調べた結果をひとまず記録しておくものである。

オプション 内容
port OpenVPNの待受ポート番号を指定。デフォルトは1194。バージョンが2.00-beta17よりも古いOpenVPNはデフォルトが5000。
proto 通信プロトコルを指定。デフォルトはudp。他にtcp-client、tcp-serverの選択肢もある様子であった。
dev 仮想ネットワークデバイスを指定。tunX、tapX、nullから選択。Xはだいたい数値が入るものと思われるけれども省略可能であった。tunはL3、tapはL2。
ca 認証局の証明書(ルート証明書)を指定。
cert サーバ証明書を指定。caで指定した認証局によって署名されたものでなければいけない。
key サーバの秘密鍵を指定。certで指定した証明書とキーペアになるものでなければいけない。
dh Diffie Hellmanパラメータを含むファイルを指定。noneを指定するとDiffie Hellman鍵交換はやめにして楕円曲線Diffie-Hellman鍵共有(ECDH)だけ使う。
tls-auth HMACキーファイルを指定。ファイル名のあとに指定する数値はサーバ側では0、クライアント側では1がよいようである。

server クライアントに割り当てるIPアドレスの範囲をネットワークとネットマスクで指定。server 10.8.0.0 255.255.255.0などと簡単に指定できるけれどもネットワークデバイスがTUNとTAPのどちらであるか、またtopologyの設定は如何なるものかなどによって心持ち挙動が異なってくるようである。
push pushで指定したオプションにせよとサーバーからクライアントに対して伝える。オプションはダブルクオートで括られていないといけない。routeの設定などは各クライアント毎にいちいち書くのは大変なことなのでこのオプションがたいへん役に立つ。
compress VPNでのやりとりするデータを圧縮するのに使用するアルゴリズムを選択する。lzo、lz4または何も指定しない。と説明書に書いてあるけれどもOpenVPN2.4以上であればlv4-v2というものも選択できるようである。lzoよりもlz4-v2のほうがCPUへの負担が小さくてよいという。サンプルの設定ファイルにはlz4-v2が記載されているけれども説明書にはまだ反映されていない模様である。

client-to-client これを有効にするとクライアント同士でのやり取りができるようになる。デフォルトは無効でクライアントはVPNサーバしか見えない。
keepalive pingを放ち接続の死活監視して指定時間を超えてタイムアウトしたら再接続を行う。ping、ping-restartを組み合わせたオプションということであろうと思う。2つの引数を取り、1つ目はpingを送る間隔を秒で指定する。2つ目はタイムアウトとみなす時間を秒で指定する。なおサーバ側では指定した秒の2倍だけタイムアウトするまで待つ。サーバ、クライアント共にこのオプションを使用できるけれども普通はサーバ側にだけ設定しておけば概ねよいようである。サーバにもクライアントにも設定されていたらサーバ側の設定で上書きされるという。
cipher やり取りの際に使用する暗号化のアルゴリズムを指定する。デフォルトはBF-CBCであるけれどもこれは攻撃に弱い様子である。またOpenVPN2.6で削除される予定であるから使わないほうがよいようである。openvpn --show-ciphersコマンドを実行すれば使用できるアルゴリズムがあらわれる。今どきはAES-256-GCMやAES-128-GCMを選択するのが良さそうである。

ncp-ciphers 暗号化に使用するアルゴリズムをどうするかサーバとクライアントでやり取りする際に、ここで指定したものから選択する。コロンで区切って複数指定することができる。デフォルトはAES-256-GCM:AES-128-GCM。双方で使用するアルゴリズムが合意に達するとcipherオプションで指定したものよりこちらが優先される仕組みであった。
tls-version-min TLSのバージョンが此れを下回ると受け入れない。デフォルトは1.0である。他には1.1と1.2が現在のところ選択できる。
tls-cipher TLS接続で使用する暗号化のアルゴリズムを指定する。openvpn --show-tlsでサポートされているアルゴリズムが一覧できる。エキスパート向けの設定であるようであるからうっかり無闇に触ることは大変危険な行為である旨、記載されていた。

But it is also easy to unwittingly use it to carefully align a gun with your foot, or just break your connection. Use
with care!

user OpenVPNプロセスの実行ユーザを指定。
group OpenVPNプロセスの実行グループを指定。
persist-key OpenVPNに再起動が発生しても鍵ファイルを再読込しないようにする。それというのも起動時はroot権限で鍵ファイルを読みにゆけるけれどもそのあとはuserで指定した権限に降格となるから普通、鍵ファイルは読み取れなくなってしまう。そうすると再起動時にたいへん困るから最初に読み込んだ鍵ファイルをそのままキープしておこうという算段のようである。
persist-tun OpenVPNの再起動が発生してもTUN/TAPデバイスを閉じて再度開くことをしないようである。
status OpenVPNサーバに接続しているクライアントやルーティングテーブルの様子を記録するファイルを指定する。デフォルトでは60秒ごとに更新されてゆく。ファイル名のあとに数値を指定すると更新間隔を変更できる。単位は秒である。

log-append OpenVPNのログを記録するファイルを指定する。毎回ファイルがクリアされて新規に記録されるlogオプションと異なって、log-appendはログがどんどん追記されてゆく。
ifconfig-pool-persist 接続しているクライアントのコモンネームと割り当てられたIPアドレスが記録される。というわけではないようである。過去に紐付けられたコモンネームとIPアドレスに基づいて、提案としてだけOpenVPNに扱われるとあるけれども何だかわからない。読み解く力の乏しさが悔やまれる。コモンネームとIPアドレスの紐づけを見るならstatusで指定したファイルで良いと思った。

$ sudo cat /var/log/ipp.txt
guro,10.8.0.4
gero,10.8.0.8
verb 出力するログの冗長さを0~11で指定。0は致命的なエラーを除いてまったくログを出力せず、数値が大きくなるに連れて冗長さが増す。3か4くらいがちょうどよい程度であった。5を超えるとパケットの読み書きが発生するたびにr、w、R、Wの文字が記録される。rwはTUN/TAPパケットを表し、RWはTCP/UDPパケットをあらわすという。ログがべらぼうに見づらくなったので無闇に設定するものじゃないと思った。

参考:
man openvpn
Openvpn2.4 ManPage

Similar Posts:

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください