クラウドエンジニアのノート

情報技術系全般,自分用メモを公開してます。

RaspberryPiで自宅にVPNを構築したときの備忘録

参考にさせて頂いた記事

qiita.com

サーバ構築

基本的にはこの記事を参考にすれば問題はないのですが,幾つか注意点があるのでそれを補足する形で説明します

準備

  • RaspbianはLiteでもDesktopでもどっちでもいいです
  • sshログインは画面とキーボードを繋げて作業するなら必要ないです(あると後々便利ですが)

初期設定でipアドレスを固定していますが,ルータがDHCPでIPを振っている場合,最悪被ることがあるので, ルータ側の設定でDHCP設定を変更して固定IPに被らないようにします

OpenVPNのインストール

sudo su を行ってスーパーユーザーで行うと楽です

build-ca./build-key-serverのときに様々入力が求められますが基本的に空欄(そのままEnter)で大丈夫です。ただ,Common Name (eg, your name or your server's hostname) []:を聞かれたときはなにか任意の名前をつけておきましょう

以下4つは,クライアント側で必要になるのでzipにして保存すると取り回しが楽です
後でscpかなんかで取り出しやすい場所に移しておくと良いと思います

zip vpnclient.zip ca.crt ta.key client.crt client.key

サーバの設定

ここがけっこう鬼門で,この通り設定してもserver.confのエラーで動かなかったです。

まず以下のように編集します。

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
tls-auth /etc/openvpn/ta.key

その後,

push "redirect-gateway def1 bypass-dhcp"

コメントアウトして
以下のDNSを設定しているところをコメントアウトするか,自分の契約しているプロバイダのDNSサーバに変更する。(すると早いってだけで,Public DNSでも動作すると思います)

push "dhcp-option DNS 208.67.222.222"


以下のサイトからDNSサーバを確認できます
プロバイダのDNSサーバーアドレス一覧及び確認する方法 | インターネット接続解説ブログKAGEMARU-info

ちなみに,コメントアウトされていたDNSアドレスはopendns.comから提供されてるアドレスみたい

サーバのスタート

ここまできたらいよいよサーバを立てます。

  • リスタート
systemctl restart openvpn
systemctl enable openvpn
  • ついでにラズパイのポートを開けて,NATを設定 以下コマンドのやっていることは,
  • udpパケットのport1194番は通す
  • 10.8.0.0/24からのパケットをマスカレード(パケットのソースIPをこのマシンのeth0ように見せかけて転送)する。

/etc/rc.local に追記すると起動時に毎回設定してくれる(逆にしないと毎回設定する必要がある)

iptables -A INPUT -p udp -m state --state NEW -m udp --dport 1194 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

追記したら再起動

起動確認

以下のコマンドで active(running)になっていればOKです。なっていなければどこでエラーなのか確認します。

systemctl status openvpn@server.service

もしエラーが出ていたら

journalctl -u openvpn@server.service

でエラーの内容を確認します。

ちなみに私はserver.confにエラーがある旨のログがあったので,どこでエラーが出てるのか以下のコマンドで詳細を確認しました。

openvpn --config /etc/openvpn/server.conf

クライアント側

クライアント側はあの記事の通りに設定すれば問題ないです。

remoteのxxx.xxx.xxx.xxxはサーバのIPアドレス

とありますが,これはローカルIPではなくグローバルIPなのでお間違えなく。(あたりまえですが)

おまけ

接続されているクライアントを見る方法

cat /etc/openvpn/openvpn-status.log