前回、Ubuntu 20.04.1 LTS ServerをインストールしたRaspberry Pi 4で、IPSec/L2TP VPNサーバを構築してみました。
使用したVPNサーバ自動構築スクリプトは、外出先からVPN経由でインターネットに安全に(IPSecで暗号化して)アクセスする事を目的としており、自宅LANの機器へのアクセスはできませんでした。
本記事では、ufwの設定を調整して、外出先から自宅LANの機器へアクセスできるようにしてみたいと思います。
※23.1.16追記:
Raspberry Pi 4をVPNサーバ(ルータ)にする、新しい記事がございます。
新しい記事では、より高いセキュリティで自宅機器へのアクセスが可能になりました。
以下、古い記事になります。
目次
xl2tpd/ipsec版VPNサーバの自宅LAN機器アクセス設定
Wi-Fiルータにルーティング追加
前回構築したVPNサーバは、VPNクライアントに192.168.42.0/24のIPアドレスを付加しました。これは/etc/xl2tpd/xl2tpd.confファイルで設定されています。
sudo vi /etc/xl2tpd/xl2tpd.conf
こちらの設定に合わせて、Wi-Fiルータにルーティングを追加します。
- 宛先アドレス: 192.168.42.0/255.255.255.0
- ゲートウェイ: Raspberry PiのIPアドレス
- メトリック: 初期値の15
これで、自宅LAN内の機器へ「192.168.42.xxx」の機器=外出先のVPNクライアントからアクセスがあった場合、Wi-FiルータがパケットをRaspberry Piに転送してくれるようになります。
ufwのルール追加
192.168.42.0のセグメントから、自宅内の192.168.xxx.0のセグメントへ通信できるように、ファイアウォールの設定を変更します。
次のコマンドを実行しました。
sudo ufw route allow from 192.168.42.0/24 to 192.168.xxx.0/24
sudo ufw route allow from 192.168.xxx.0/24 to 192.168.42.0/24
sudo ufw reload
xxxの部分は、自宅LANに合わせて変更して下さい。 これでVPNクライアントと自宅LAN機器とのファイアウォールが解除されました。
NAT転送設定
最後にufwにNATルールを追加して、VPNクライアントと自宅LAN機器間でパケットのやり取りを行えるようにします。
sudo vi /etc/ufw/before.rules
最後尾に次の内容を追加しました。
# VPNリモートアクセス設定
*nat
:POSTROUTING - [0:0]
:PREROUTING - [0:0]
-F
-A POSTROUTING -s 192.168.42.0/24 -o eth0 -j MASQUERADE
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
設定追加後、ファイアウォール設定をリロードします。
sudo ufw reload
以上で外出先から自宅のLAN機器へアクセスできるように設定が完了しました。
Raspberry Pi再起動後、VPN経由で自宅LAN機器に接続できない場合
Raspberry Piを再起動すると、外出先から自宅LAN機器へアクセスできない場合がありました。次の原因が考えられます。
ppp0(IPv4 PPPoE)接続されていない
そもそものIPv4 PPPoEが接続されておらず、ppp0インタフェースが無い場合があります。
その場合、もう一度再起動してppp0接続されるかどうか確認します。
Raspberry Pi再起動後は必ずppp0インタフェースが存在するかどうか確認することをお勧めします。
グローバルIPアドレスのDDNS登録タイミング
外出先からVPN接続する際、DDNSのホスト名でアクセスしますが、再起動直後はDDNSに記録されたIPアドレスと実際のIPアドレスが違っている場合があります。
VPN接続できない場合は、しばらく時間を開けてから、もう一度VPN接続します。
sudo ufw reloadしてみる
うーん。もしかして、私の設定が不十分なのかもしれません。
VPN接続できているにも関わらず、自宅LAN機器へアクセスできない場合、ufw reloadを行うとアクセスできるようになります。
sudo ufw reload
なにかサービスや設定を読み込むタイミングに問題があるのかもしれません。
さしあたり、Raspberry Pi再起動後は、ppp0の確認と、ufw reloadによるファイアウォール設定の再読み込みを行っております。
以上で一応、Raspberry PiでVPNサーバを構築し、外出先から自宅のLAN機器へアクセスできるようになりました。
一応というのは。実は、アクセス速度はあまり早くありません。IPSecの暗号化にCPUパワーが必要なのかと思いましたが、VPN接続中のRaspberry Pi 4のCPU負荷はそれほど無いため、どうも違う感じがします。
もしかすると、おうちの環境、回線の問題なのかもしれません。とはいえ、実用的な速度は出ています。
それほど手間なく構築できますので、よろしければ試してみて下さい。