2021/09/12

TrueNASでOpenVPNを設定したお話

以前から自宅で運用していたTrueNASの標準機能で備わっていたOpenVPNを四苦八苦しながらもなんとか稼働にこぎつけられたので、共有兼覚え書きとして書き残しておきます。
主な理由としては、最近外出先から自宅のNASにアクセスする頻度が増えたこと、SSH認証だとたまーに不正アクセス試行があるのと、外出先のFree Wi-Fiを使用したときにVPNを通すことでそれなりに安全なネット環境を構築できることからの理由で着手に至りました。
truenasandopenvpn.png
環境
・TrueNAS-12.0-U5.1
・VPN機能無しルーターからLANハブを通してTrueNASに接続
前提条件としては、
・TrueNASの実機インストールは終わっている
・ある程度のネットワーク設定(固定IP化とか)が完了している
・LAN内のWebブラウザから管理画面にログインができる
・No-IP、MyDNS等のサービスでVPN接続用のDDNSアドレスを取得している
くらいでいけるかと思います。
それでは本題です。
まずTrueNASでOpenVPNを動かすには、「認証局(CA)」と「証明書」が必要ですので、先にそちらを作成していきます。
・認証局の作成
Web管理画面のシステム>認証局を開くと、恐らく何も入ってない空っぽのリストが出てくるかと思います。(自分は既に追加済みなので1個だけ入ってます)
screenshot_210912102001.png
右上の「ADD」を押すと、認証局の追加画面が開きます。
screenshot_210912102532.png
ここに、以下の情報を入力していきます。
・Name:適当な名前を入力します。「VPN_CA」とか「OpenVPN_CA」とかで良いと思います。
・Profiles:「Openvpn Root CA」を選択。
・国、State、Locality:それぞれ適当な国、県、地域を入力。特に制限も無いので大雑把な自分の住所なり皇居の住所でも入れとけば良いと思います(投げやり)
・Organization:組織名の入力。なんか会社名があればそれを入力、無ければ個人(Individual)とかで良いと思います。
・Eメール:適当なメールアドレスを入力。ちゃんと自分のを入力しても実在しない適当なものでも良いと思います。
・共通名:上の「Name」で入力した文字列を入力します。必須項目(*)ではないですが、これを入力していないと後でエラーが発生してしまうので必ず入力。
・Subject Alternate Names:VPNアクセス用に取得しているDDNSアドレスを入力。
screenshot_210912104843.png
後はデフォルトのとおりでSubmitを押すと、CAの新規作成が完了します。
・証明書の作成
同じくWeb管理画面のシステム>証明書を開くと、こちらはデフォルトで「freenas_default(バージョンによって違うかも)」等の証明書が入っていると思いますが、こちらは使わずに、VPNを使用するデバイスごとに証明書を作成していくことになります。
こちらも右上の「ADD」で新規作成していきます。
screenshot_210912133359.png
最初にサーバー用の証明書を作成します。後にクライアント用も作成するのですが、サーバー用は1個のみ、クライアント用は接続するデバイスごと(例えばスマフォとPCで繋ぐのであればそれぞれで合計2個)に作成します。
・Name:「OpenVPN_Server」等のサーバー用証明書であることが分かる名前を入力します。
・Profile:サーバー用証明書なので、「Openvpn Server Cerificate」を選択。
・Signing Certificate Authority:認証局の作成で作成した名前を選択。
・水色枠内:認証局の作成で入力した項目と同じなので適当に入力。
・共通名:証明書でも同じくNameと同じ文字列を入力。
・Subject Alternate Names:同じくVPN接続用のDDNSアドレスを入力。
screenshot_210912135243.png
その他項目はデフォルトのとおりでSubmitを押し、サーバー用証明書の作成完了です。
次にクライアント用証明書を作成します。
・Name:「OpenVPN_Client_Pixel4a」等、クライアント用証明書であること、使用するデバイス名が分かるような名前で入力します。
・Profiles:クライアント用なので、「Openvpn Client Certificate」を選択。
・水色枠内:先程と同様です。
screenshot_210912141352.png
その他はデフォルトでSubmitを押し、クライアント用証明書の作成完了です。
これをVPN接続するクライアントの端末分作成します。
・OpenVPN Serverの設定
認証局と証明書の準備ができたら、サービス>Openvpn ServerのActionsの鉛筆マークで編集画面に飛び、VPNサーバーの設定を変更していきます。
画像では既に稼働中ですが、最初はRunningのトグルやStart AutomaticallyのチェックはOFFになってると思います。
screenshot_210912143050.png
出てきた編集画面で、下記情報を入力していきます。
・Server Certificate:サーバー用証明書として作成したものを選択。
・Root CA:作成した認証局を選択。
・Server:VPN内で自動割り振りされるIPアドレスとサブネットマスクを指定。ぶっちゃけなんでもいいんですが、他のネットワークと重複するとまずいので10.x.x.x/24とか10.8.x.x/16が個人的には無難なように思います。
・Port:UDPのポートがデフォルトで入っているのでそのまま。変えたければ変更。
・Authentication Algorithm:認証用のアルゴリズム。これもどれでもいいですがSHA256が互換性広いみたいなので適当なのを選択。
・Cipher:データパケットの暗号化アルゴリズム。これも適当でいいです。多分。
・Compression:データパケットの圧縮方法。自宅のネットが遅いとかなら圧縮掛けた方がいいかな~くらい。
・Protocol:デフォルトUDPなのでUDPを選択。TCPにしたい場合はそれでもいいかも。
・Device Type:TUNがルーティング方式、TAPがブリッジ方式。今回はTUNを選択。
・Topology:あまりよく分からなかったんですがSUBNETが良いらしいです。
・Additional Parameters:追加のコマンド等を記述する箇所のようです。とりあえず下記を入力しています。
push "route 192.168.0.0 255.255.255.0"
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
 1行目:VPNで割り振った10.xのプライベートIPをLAN内のIPにルーティング。ここの192.168.0.0の部分は自己環境のIPで置き換えてください。
 2行目:LAN内外を問わず全ての通信をVPNを通すように設定、この文言によって危険なFreeWi-Fiでも安全に通信できるとかなんとか。
 3・4行目:DNSを指定。ここで指定しているのはOpenVPNのDNSです。
screenshot_210912143911.png
以上の情報を入力し、保存ボタンで設定を保存します。

Web管理画面のシステム>調整を開き、以下の6項目を追加します。
VariableとValueは下記の通りで、Typeはすべてrc.confを選択します。
Variable Value
firewall_enable yes
firewall_type open
gateway_enable yes
natd_enable yes
natd_flags -dynamic -m
natd_interface re0 ※
※ 最後の「natd_interface : re0」のre0の部分はTrueNASで使用しているネットワークインターフェイスの名前に置き換えてください。(Web管理画面のダッシュボード下部か、ネットワーク>ネットワークの概要ページで参照できます)
追加が完了したら、TrueNASを一旦再起動します。

再起動が完了したらサービス一覧の画面に戻り、OpenVPN ServerのRunningトグルをONにしてVPNを起動させます。
ついでにStart Automaticallyチェックも入れて自動起動するようにしておきます。
その後、再度編集画面に戻り、保存ボタンがある列の一番右の「Download client config」ボタンを押すと、証明書一覧を選択する小窓が出てきます。
ここでOpenVPNの接続クライアント用の設定ファイルがダウンロードできるので、設定したい端末を選択してSubmitを押します。
screenshot_210912150248.png
するとダウンロードが始まり、「openVPNClientConfig.ovpn」のようなファイルがダウンロードされるかと思いますので、このファイルをメモ帳など適当なエディタで開きます。
別の証明書を選択してダウンロードでもファイル名は一緒なので、「openVPNClientConfig_Pixel4a.ovpn」等のようにわかりやすい名前を追加しておくことをおすすめします。
このファイルのremoteの部分がデフォルトではダブルクォーテーションで囲まれたLAN内のIPアドレスになっているので、その部分をダブルクォーテーションを除去した、VPN接続用のDDNSアドレスに置き換えます。
screenshot_210912150747.png
他の部分は設定がそのまま反映されているので変更せずに保存します。
・VPN通信用ポートの開放
ルーターの設定からVPN通信用ポートを開けておく必要があるので、ルーターの管理画面等からポート転送等の項目を探し、外部ポート1194→内部IPはTrueNASのローカルIP、内部ポートは同じく1194を設定しておきます。
・クライアント端末の設定
ここからは端末ごとの設定になりますが、大体の設定は一緒なので適宜置き換えて進めてください。
最初に端末にて、WindowsであればOpenVPNのホームページから、AndroidやiOS等であればストアアプリから、OpenVPNのクライアントソフトをインストールします。
インストールが完了したら起動し、「Import Profile」なるメニューか項目かがあると思うので、そこに先程書き換えた.ovpnファイルを読み込ませます。
無事読み込みが完了したら接続ボタンを押し、接続が完了したらVPNへの接続はOKです。
設定が上手く行っていれば、VPN接続した状態でウェブブラウザ等でLAN内のNAS管理画面が開けたり、Samba等でストレージにアクセスできるようになっていると思います。
ネットワークのことはあまり分からずに進めたので、もし間違ってる所がありましたらご教授頂けると幸いです。
また記事通り設定したけど繋がらない等あれば(記載を忘れてる可能性もあるので)コメントやTwitterに投げてもらえれば時間があれば対応すると思います。多分。

コメント

非公開コメント