実家に帰省した際、実家のブロードバンドルータにログインしてみると、VPN機能があることに気が付きました。
実家のPCを、自宅のサーバに常時VPN接続させることには成功していますが、
ブロードバンドルータ側で常時接続していた方が良いのでは無いかと思い、試行錯誤しました。
このブロードバンドルータは HUMAX HG100R-02JG というもので、ケーブルテレビのJ:COMの機器です。
インターネットに情報がありませんでしたが、なんとかVPN接続に成功し通信が可能になりましたで、情報を残しておきます。
前提
HUMAX HG100R-02JG の設定画面を見る限り、IKEv1に対応したIPsecのようです。なので、strongSwan側もIKEv1で設定しました。
接続構成としては、冒頭の図の通り、
HG100R-02JGとYamaha RTX810がグローバルIPを持っており、Yamaha RTX810の配下にstrongSwanがおり、プライベートIPにNATをしています。
strongSwanがNATの内側にいるため、NAT Traversalをしようかと思っていましたが、HG100R-02JGが対応していないのか、NAT Traversalができませんでした。
したがって、インターネット側から来るESPパケットをstrongSwanにフォワーディングする必要があります。
VPN接続を開始する際は、HG100R-02JGをinitiatorに接続する必要があります。(strongSwan側から接続してもネゴシエーションが途中で終わる?ような動きをする)
また、strongSwanサービスが落ちたり、再起動してVPNが切れると、HG100R-02JGは再接続して来ないので注意。
2020/01/02 追記
調査出来ていませんが、HG100R-02JGの管理ページにアクセスしたときに、再接続するようです。どのページにアクセスすれば、再接続するかも分かっていません。
定期的に管理ページにアクセスするスクリプトを作成できれば、常時接続が可能かもしれません。
設定
各種設定は環境に合わせて設定してください。主に太字の部分を変える必要があります。
strongSwan側
/etc/ipsec.conf
conn humax ikelifetime=28800s lifetime=3600s keylife=20m rekeymargin=3m keyingtries=1 keyexchange=ikev1 authby=secret left=%defaultroute leftsubnet=172.16.0.0/24 leftid=vpn.example.com right=%any rightsubnet=192.168.0.0/24 rightid=@humax.vpn.example.com auto=add ike=aes128-sha1-modp1536 esp=aes128-sha1 forceencaps = yes rekey=yesHG100R-02JG側とタイマーを合わせています。
rekey=yes にしないと、1時間ごとにCHILD_SAが増え続けていくので注意。
leftid=の最初に"@"を入れると繋がりませんでした。
強制的にNAT Traversalをしたかったため、forceencaps = yes を入れていますが効果がありませんでした。なので無くて良いです。
/etc/ipsec.secrets
@vpn.example.com @humax.vpn.example.com : PSK Password
IPTABLES
iptables -A INPUT -p esp -j ACCEPTIPTABLES等をお使いの場合は、ESPパケット許可の追加もお忘れなく。
nftablesの場合はこちら。
>> CentOS 8 で nftables を設定してみた
自宅側ルータ(RTX810)
インターネット側から来るUDPで包まれないESPパケットをstrongSwanにフォワーディングするため、IPsecパススルーの設定をRTX810に追加します。これは環境によって異なるのであくまで、例を記載しておきます。
ip filter 200084 pass * strongSwanのIP esp * * nat descriptor masquerade static 1000 5 strongSwanのIP esp pp select 1 ip pp nat descriptor 1000 ip pp secure filter in (略) 200084 (略) dynamic (略)
HUMAX HG100R-02JG側
Webブラウザから、192.168.0.1にアクセスします。(おそらくこれがデフォルト)ユーザ名、パスワードは機器に書いてあります。
ログイン後右下の『ネットワークの詳細設定へ』をクリック。
『セキュリティ』→『VPN』でVPN設定画面へ移動。
仮想プライベートネットワーク
IPsec エンドポイントで『有効』を選択。名『vpn.example.com』(なんでもよい) を記入。
制御『有効』を選択。(画像は接続完了後のもの)
ローカルエンドポイント設定
HG100R-02JG側のネットワークとIDを設定する。アドレスグループを『IP subnet』
IP アドレス『192.168.0.0』
サブネットマスク『255.255.255.0』
ID タイプ『Fully qualified domain name (FQDN)』
ID『humax.vpn.example.com』
リモートエンドポイント設定
strongSwan側のネットワーク、ID、接続先を指定する。アドレスグループを『IP subnet』
IP アドレス『172.16.0.0』
サブネットマスク『255.255.255.0』
ID タイプ『Fully qualified domain name (FQDN)』
ID『vpn.example.com』
ネットワークアドレスタイプ『Fully qualified domain name (FQDN)』
リモートアドレス『vpn.example.com』
IPsec 設定
事前共有キー『Password』フェーズ 1 DH グループ『Group 5 (1536 bit)』
フェーズ 1 暗号化『AES-128』
フェーズ 1 認証『SHA-1』
フェーズ 1 SA 存続時間『28800』秒間
フェーズ 2 暗号化『AES-128』
フェーズ 2 認証『SHA-1』
フェーズ 2 SA 存続時間『3600』秒間
最後に『適用』をクリック。
画面上部、IPsec エンドポイントの制御を『接続』するとVPN接続が開始されます。
試行錯誤中のエラーなど
no shared key found for 'x.x.x.x'[x.x.x.x] - 'y.y.y.y'[y.y.y.y]
共有鍵を ipsec.secretに入れていたにも関わらず、鍵が見つからないと出ました。一字一句間違えていないかを確認し、設定読み込みの際は、
ipsec restart
をするか
ipsec update と ipsec rereadsecrets
を行うこと。
no matching CHILD_SA config found
セレクター(ネットワークアドレス)が双方で正しいか確認します。VPN接続はできた(ESTABLISHED)が、通信ができない
NAT Traversalができないため、ESPがUDPに包まれず、LAN側にフォワーディングできていない可能性があります。NAT(ブロードバンドルータ等)の設定を確認し、IPsec/VPNパススルーやポートマッピングが出来ているか確認します。
はじめまして。
ブログを参考させて頂いて外部PCからHG100R-02JGへのVPN接続を試みていますが
マニュアルの内容を理解できない箇所が多いためコメントにて質問させてください。
①遠方のPC→HG100R-02JGへのVPN接続は可能なのでしょうか?
(遠方:PC→ルーター→ONU)
②HG100R-02JGマニュアルに記載されているリモートエンドポイント
ローカルエンドポイントとはこの場合どの機器になるのでしょうか?
コメントありがとうございます。
ご質問の件ですが、
①はおそらく不可能です。
私もいろいろ試しましたが、
HG100R-02JGから遠方へのVPN接続は可能で、
遠方からHG100R-02JGへのVPN接続が不可能でした。
遠方からリモートアクセスしたい場合は、
HG100R-02JG配下にVPN接続ができる機器を置いた方が良いです。
(HG100R-02JGのフォワーディング設定でできるはず。
もしLinuxの知識がありましたら、strongSwanがおすすめです。)
②
ローカルエンドポイントは、HG100R-02JG自体のことです。
リモートエンドポイントは、遠方のVPNルータなどです。
記事の方もわかりやすいよう更新してみます。
回答ありがとうございます。
HG100R-02JGへのVPN接続は不可能なのですね。
数日いろいろ試してみましたが、繋がらないので困っていました。
HG100R-02JG下にVPN接続できる機器を置く方法で試してみます。
ご教示頂き、大変助かりました。
通りすがりですがとても参考になりました
HG100R-02JGのマニュアル(JCOM)って、一般ユーザーに優しくないですよね...