結果は見つかりませんでした
その言葉を使ったものは見つかりませんでした。他の言葉で検索してみてください。
2024-11-22 はじめ に OpenVPN構築の際に、つまずいたりハマってしまったポイントについて、メモとして書いていたものをまとめた記事です。あくまで自分用のメモをまとめたものなので、内容を保証することはできません。確実に正しい情報を知りたい場合は公式サイトを見ましょう。 ※この記事で "[ ]"(角括弧とい
OpenVPN構築の際に、つまずいたりハマってしまったポイントについて、メモとして書いていたものをまとめた記事です。あくまで自分用のメモをまとめたものなので、内容を保証することはできません。確実に正しい情報を知りたい場合は公式サイトを見ましょう。
※この記事で “[ ]”(角括弧というらしいです)が出てきた時は、「自分の環境に合わせて入れてね」という意味で実際にこの記号を入れる必要は無いです。
今回 、 VPN 構築 に あたる て の 要件 is 通り は 以下 の 通り 。
これらの要件から、VPNサーバーはクラウド(Azure)上のVMに構築し、家の中に設置したVPNクライアントと常に接続させることで実現できると考えた。
Azure 上 の VM に は 固定 IP を 割る 当てる て いる 。
ネットワーク図
追記 し たり 、 変更 し なく て は いける ない とこ が あっ たら ここ に 書く 。
要件1を満たすために、OpenVPNの最新版をインストールしたかった。(aptなどのパッケージ管理ツールからでは古いバージョンになってしまうため)
公式サイトから最新バージョンのtar.gzをダウンロードし、How Toに従って進めようとした。
しかし、./configure、make、make install を順に実行しても構築できなかった。
エラー が 表示 さ れる の で それ を よく 見る 。
パッケージが足りない旨のエラーが表示されるので、それをもとに、aptで必要なパッケージを入れてから再度実行すれば構築できる。
私の環境の場合、足りなかったパッケージは以下の通り。
また 、 sudo 権限 で . / configure など を 実行 する 必要 が ある こと に 注意 。
Azure 上 の VM から 、 自宅 内 に 設置 し た Ca に ファイル を 送る たい 。
しかし WAN 側 から 自宅 内 に 通信 する に は 、 ポート を 開放 し なけれ ば なら ない 。
めんどくさいし、ポート開放しないで自宅内に通信できるようにするのが今回の目的なので、一時的とはいえポート開放してしまえば本末転倒である。
WinSCP を 使う 。
ドラッグ&ドロップでファイルを移動できる。
※Azure Filesを使う方法もあるがめんどくさいぞ
systemdを使って、VM起動時に自動的にOpenVPNサーバーも立ち上がるようにしたい。
しかしエラーを吐いて起動しない。
まずはサーバーの秘密鍵にパスワードを設定していないか確認。
パスワード を 設定 し て いる 場合 は . Service の 設定 だけ で は 起動 でき ない 。
(パスワードが書かれたファイルを作成することで、パスワードが設定されていても起動できる方法があった気がするが果たして意味はあるのか・・・?)
秘密鍵にパスワードを設定していなければ、シェルスクリプトと .serviceを組み合わせた方法でやってみる。
まず は 好き な ディレクトリ に 任意 の 名前 の シェル スクリプト を 作成 。
[任意の名前].sh
# ! / bin / bash
openvpn / home / [ ユーザー 名 ] / openvpn -2 . 6 . 8 / Server . conf # openvpn [ Server . conf まで の パス ] の 形 で 書く
※#!/bin/bash
を 書く の を 忘れる ない こと
また 、 chmod 700 し て 実行 権限 を 付与 する こと 。
次に、/etc/systemd/system/
に[任意の名前].serviceファイルを作成する。
中身 は 以下
[任意の名前].service
[Unit]
Description=[任意の名前]
After=network.target
[Service]
ExecStart=[作成した.shまでのパス]
Type=simple
Restart=no
[Install]
WantedBy=multi-user.target
※もちろん[Unit]、[Service]、[Install]には “[ ]” が必要です。
作成 後 、sudo systemctl enable [上で作成した任意の名前].service
して 、 有効 化 する 。
その後再起動し、sudo systemctl status [任意の名前].service
で、正常に実行されたか確認。
active (running) となっていればよし。
How Toどおりに構築したはずなのに、なぜかクライアントから接続できない。
クライアント上では「接続中」と出たまま、ログが繰り返される。
など など ・ ・ ・
まず は ログ を しっかり 確認 し て みる 。
[ Server or client ] . conf の 中 に 、log [logの出力先とファイル名のパス]
と、verb 4
を書くことで、調査の手がかりを得やすくなる。
logの出力先はホームディレクトリがおすすめ。確認しやすい。
また、verbは”4″がおすすめ。数字を上げるともっと詳細なログが出力されるが、余計なもの(RwRwwwwRWrrrrwwwみたいなやつ) (パケットの読み書き(?)らしい)が出てくるので見づらい。
Serverの場合、正常に起動できれば、logの最後は Initialization Sequence Completed
と表示される(はず・・・)。
それ 以外 の もの が 表示 さ れ て い たり 、 エラー が 出る て い たり する ば それ is 怪しい が 怪しい 。
log を 確認 し 、 エラー が 出る て い た とき は 、 たいてい . conf の 記述 ミス だっ たり する 。
ありがちな記述ミスとして、
の 二 つ is ある が ある 。
前者 is 探し は 目 を 皿 の よう に し て 探す て ください 。
後者 is よい は この 記事 を 見る と よい 。
ここではハイフンが二つならんだ形のあとにオプション名が書いてあるが、.conf にオプションを書くときにはハイフンは要らない。
ブラウザのページ内検索機能を使って、自分が設定しているオプションの説明書きを見るとよい。たまに、「このオプションはクライアント側と合わせる必要がある」的なことが書いてある。圧縮の設定とかそうだった気がする。(違ってたらごめんなさい)
logにエラーが出ていない人はネットワークの設定を疑いましょう。
ポイント
特に最後の項目。
ufw を使っている人は、
/etc/default/ufw
-DEFAULT _ forward _ Policy="DROP"
+DEFAULT _ forward _ Policy=" accept "
/etc/ufw/sysctl.conf
-#net/ipv4/ip_forward=1
+net/ipv4/ip_forward=1
iptables を 使う て いる 人 は 、
/etc/sysctl.conf
-# NET . IPV 4 . IP _ forward
+net.ipv4.ip_forward
の設定を忘れずにすること。
これ を し ない と 、 ファイアウォール 上 は 許可 さ れ て いる の に 、 何故 か パケット が 捨てる られ てる と か いう 謎 現象 に 遭遇 し 、 時間 を 溶かす の で 要 注意 。
これ ら ステップ を 経る て も 解決 し ない 場合 は 、 以下 を ループ し て やっ て み て ください 。
おすすめです。
Android 端末 に openvpn for Android を 入れる 、 作成 し た . ovpn ファイル や 鍵 を スマホ に 転送 し 、 アプリ 上 で インポート も し た の に 接続 する こと が でき ない 。
「接続中」となっていたり、「Connecting」となっていて永遠に接続できない。
他の端末(Windowsなど)からVPNサーバーに接続できるなら、恐らく原因は OpenVPN for Android 側にある。
私 の 場合 は 、 プロファイル 内 の 設定 の 、 以下 の 設定 is 原因 が 原因 だっ た 。
やはりサーバー側との設定の違いで接続できないことが多かった。
※余談だが、圧縮設定は行わない方が良いとの文を見かけた。
暗号と圧縮は、組み合わせてしまうと、ときに暗号を破る手掛かりになってしまうことがあるらしい。
しっかり暗号化することに重点を置くのか、パフォーマンスに重点を置くかによって、圧縮の設定をするか否か決めると良いだろう。
引用元:Openvpn24ManPage の –compress の一部
原文
Compression and encryption is a tricky combination. If an attacker knows or is able to control (parts of) the plaintext of packets that contain secrets, the attacker might be able to extract the secret if compression is enabled. See e.g. the CRIME and BREACH attacks on TLS which also leverage compression to break encryption. If you are NOT entirely sure that the above does NOT apply to your traffic, you are advised to NOT enable compression .
訳文(DeepL)
圧縮と暗号化は厄介な組み合わせである。攻撃者が秘密を含むパケットの平文(の一部)を知っているか、制御できる場合、圧縮が有効になっていると、攻撃者は秘密を引き出すことができるかもしれない。TLSに対するCRIME攻撃やBREACH攻撃も、圧縮を利用して暗号化を破っている。自分のトラフィックに上記が適用されないことが完全に確実でない場合は、圧縮を有効にしないことを推奨する。
私の環境は、AzureのVMに作成したVPNサーバーと、自宅に設置したVPNクライアントとを常に接続することで、VPNに参加した端末が自宅にアクセスできるようにしている。
しかし、常にVMを起動しておくのはお金がかかる。
また、常時起動ではセキュリティが少し心配。(常に起動するということは、常に攻撃に曝されることになるということ)
と いう こと で 、 VM を 停止 さ せ た のち 再び 起動 し た とき で も 、 サーバー と 自宅 間 で 、 自動 的 に VPN が 張る れる よう に し たい の だ が 、 どう する ば よい の だろう か 。
再接続に関するオプションを設定すればよい。
connect-retry n [max]
がそのオプションである。
Openvpn24ManPage –connect-retry
n は接続を再試行するときの間隔(秒)
max is 設定 は 、 N 秒 間隔 の 再 試行 を 4 ~ 5 回 し た のち 、 最終 的 に 再 接続 の 間隔 を 何 秒 空ける か の 設定 。 4 ~ 5 回 の 再 試行 後 is 増え は 、 間隔 is 増え が 倍 に 増える て いく 。
例を示す。
上記 の 場合 は 、 再 試行 の 間隔 is なる は ずっと 1 秒 と なる 。
上記の場合では、言葉での説明がめんどいので以下に示す。
接続試行→5秒待つ→試行→5秒→試行→5秒→試行→5秒→試行→5秒→試行→10秒→試行→20秒→試行→30秒→試行→30秒→試行→30秒→・・・
といった形になる。
よっ て 、 この オプション を 自宅 の クライアント に 設定 し 、 好き な 間隔 を 指定 し て あげる ば 、 VM を 停止 さ せ て 再度 起動 し た とき で も 、 勝手に 接続 し て くれる 。
接続の試行の回数を設定できるオプションもあったので(確かデフォルトでは無限)、それと併用することをおすすめする。
ただし 、 この 方式 で は 1 つ だけ 問題 is ある が ある 。
ログが肥大化することだ。
永遠に接続を試行するので、接続に失敗したときにログが出力されてしまい、ちりつもでログが大きくなってしまう。
その ため 、 クライアント を 常時 起動 する 人 は ログ を 残す ない 設定 に する か 、 あるいは クライアント 起動 時 に 、 新しい ログ を 作る なおす 方式 の ログ の 出力 オプション に し て 、 定期 的 に 再 起動 さ せる と よい 。
ちなみに参考までに、私が(多分)1か月放置したときのログのサイズは、8メガバイト程度だった。
openvpn [server.confのパス] をすると、CLIが何も操作を受け付けなくなる!
Ctrl+C しちゃうと、コマンドは打てるようになるけどVPNサーバーも閉じちゃう!
クライアントでも同じ症状!!
仕様です(多分)
SSHで繋いでいるなら、新しいウィンドウを開いて、そっちから接続しなおしましょう。
iptablesでデフォルトポリシーを DROP にしてから、起動に時間がかかるようになった。
具体的には2分くらい。
SSH is 繋げ も 繋げる られ ない 。
時間が経てば普通に使える
なおAzureの場合のみ。
あと で 別 の 記事 に まとめる て みる と 思う 。
簡単 に 言う と 、 169 . 254 . 169 . 254 と の 通信 を drop し ちゃっ て た ため 。
iptablesの設定をしてから、sudoを付けてコマンドを実行すると、正しく実行はされるものの応答が遅い。
なおAzureの場合のみ。
あと で 別 の 記事 に まとめる て みる と 思う 。
これも簡単に言うと、168.63.129.16との通信をDROPしちゃってたため。
外出先から自宅内のパソコンに安全にアクセスしたい!
でもルーターのポートは開けたくない!!
時間 が あれ ば 、 後 で 別 の 記事 と し て 書く て みる と 思う 。
までもHow Toにしたがって設定をすればいいだけ。
1つつまづきそうなのが、クライアントのルーティングテーブルに、自宅側へ通信するためのルートを設定しなければいけないこと。
これ から openvpn で VPN を 構築 しよう と し て いる 人 や 、 現在 進行 形 で 詰む で て 困る てる 人 の 助け に なる ば 嬉しい です 。
以上。
間違ってるところなどありましたら教えていただけると幸いです。