カブアンド「kabu&ひかり」のIPv6(DS-Lite)利用してSynology NAS(DS223j)のOpenVPN接続で「proto udp6」が動きました

3/22追記しました。設定を変更してipv6で接続ができました。
 途中から、備忘録的な日記になっているので、
  VPN接続が安定して問題がないようなら、まとめ記事を書きます!

3/21追記。なぜか、接続ができなくなりました。
3/14追記しました。「DS-Lite: IPv4-over-IPv6トンネル」と「OpenVPN: IPv4トンネル」について
3/13追記しました。「VPNConfig.ovpn」を作成しました。
3/11追記しました。あとがきに接続についての問題点解決の推測を追加しました。

はじめに

「kabu&ひかり」に「ドコモ光」から乗り換え
久しぶりにVPN接続を試みたところ、接続ができませんでした。Synology NAS(DS223j)のファイアウォール設定に誤りがあるかもしれないと考え、デフォルト設定に戻してみましたが、それでも接続できませんでした。

HGW(RX-600MI)にログインしたところ、以前とは画面が変更されていました。PPPoE接続ではなく「IPv6」接続に切り替わっており、192.168.0.1:8888/t でログインすると「Xpass」の設定画面が表示されました。「kabu&ひかり」の公式ページを確認したところ、PPPoE接続も利用可能なようですが、PPPoE用のIDとパスワードが見つかりませんでした。プロバイダである「kabu&ひかり」に問い合わせれば提供してもらえるかもしれません。

そこで、この機会にIPv6環境でOpenVPNに挑戦することにしました。OpenVPN用の設定ファイル「VPNConfig.ovpn」をIPv6対応に修正し、VPN接続の確認はできたのですが、iPhoneのアプリからは接続できませんでした。iPhoneからNASへのPing確認は正常に応答があるものの、アプリからの接続ができない状態です。

接続できました。
試しに、従来使用していたIPv4用の「VPNConfig.ovpn」を使用すると接続が可能でした。接続ができたので、現時点での備忘録として記録しておきます。しかし、この接続方法にベストであるかの確認はできていません。もし同様の設定を試される場合は、自己責任でお願いします。

XpassとIPv6の設定に関する注意点
XpassではIPv4でのポートフォワーディングができません。そのため、IPv6環境ではUDPポート1194のフィルタリングを許可する必要があります。HGW側では、IPv6の宛先IPを固定してフィルタを許可する設定を行っていますが、プロバイダのIPv6アドレス割り当てが変更されると通信ができなくなる可能性があります。IPv6の宛先IPを固定せずに設定する方法も考えられますが、プロバイダのIPv6アドレス割り当て頻度を考慮して、今後検討したいと思います。

NASのIPv6環境とDDNSについて
NASのIPv6環境でDDNSを有効にすると、NASに割り当てられたグローバルIPv6アドレスがホスト名(例:〇〇〇.myds.me)に紐づけられます。通常、HGWは外部から内部への通信要求を許可していません。しかし、HGWでフィルタを許可することで、外部からNASのグローバルIPv6アドレスへの通信が可能になります。

また、NASでIPv6とDDNSを有効にするだけで、ローカル環境でのNASへのアクセスが「HTTPS」通信に対応しました。IPv4環境では、ルーターで80番ポートのポートフォワーディングを設定しないとHTTPSの認証ができませんでしたが、IPv6ではその必要がなくなりました。

NASのDDNSのアドレス取得について
・IPv4は、ルータのアドレス
・IPv6は、NASのアドレス

3/14追記しました。「DS-Lite: IPv4-over-IPv6トンネル」と「OpenVPN: IPv4トンネル」について
ポイント!
iPhoneとNAS間は、OpenVPNのIPv6(1194UDP)で接続され、そのトンネル内でIPv4はカプセル化され通信します。
※ DS-LiteのIPv4-over-Ipv6トンネルのIPv4とは別の仕組みで接続されています。

設定手順

NASへのVPNServerのインストール設定、DDNSの設定、VPNServerの設定、OpenVPNの設定については、こちらの記事の「【その1】Synology NAS(DiskStation DS223j)でOpenVPNServerを稼働させて、モバイル端末から接続します。」を確認して下さい。

変更箇所のみの記載しました。

「IPv6」ネットワーク設定
ヤモリは、「IPv4」のみの運用でしたので、「IPv6」を有効にします。
  • DSMにログインして、「コントロールパネル」アイコンをクリックして開きます。
  • 「ネットワーク」のアイコンをクリックして開きます。
  • 「ネットワークインターフェイス」タブを選択して「LAN」を選択します。
  • 「編集」ボタンをクリックしたら「編集」が画面開きます。
  • 「IPv6」タブを開き「IPv6設定」を「OFF」から「自動」を選択します。
  • 「IPv6アドレス」が表示されることを確認します。
     インターネットでのグローバルなアドレスとなります。
DDNS (Dynamic Domain Name System)の確認

  • コントロールパネル」から「外部アクセス」を選択します。
  • 「DDNS」タブを選択します。
  • 外部アドレスに「IPv6」のアドレスが表示されていればOKです。
VPNServerの設定

・□ VPNリンクで圧縮を有効にする
 ⇒ チェックを外します。
  チェックが入っているとアプリが接続できません。

ホームゲートウェイ(RX-600MI)の設定

 OpenVPNを利用するには、ルータに設定が必要となります。
 「IPv6パケットフィルタ設定(IPoE)」に設定を追加します。

 

  • Webブラウザに「192.168.1.1」と入力します。
    ホームゲートウエイのLAN側のIPアドレスです。
  • 左側メニューの「IPv6パケットフィルタ設定(IPoE)」を選択します。
  • 「IPv6パケットフィルタ設定(IPoE)」が開くので、右側の”編集”ボタンを押します。
    ・フィルタ種別 ⇒ 「許可」を選択します。
    ・プロトコル ⇒ 「● プロトコル名選択」を選び、「UDP」を選択します。
    ・送信元IPv6プレフィックス/プレフィックス長 ⇒ 「● すべて指定」を選択します。
    宛先IPv6プレフィックス/プレフィックス長 ⇒ 「NASのIPv6プレフィックス」「プレフィックス長 128」

    送信元ポート ⇒ 「● すべて指定」
    ・宛先ポート ⇒ 「● ポート番号指定(1-65535)」「1194」
    「設定」ボタンで完了です。

VPNConfig.ovpn 3/21追加

3/21追記

IPv6で接続できました!
※ しばらく、こちらの設定で検証します。

synologyNASのネットワーク設定の変更
<IPv6> 「自動」から「DHCPv6-PD」に変更

synologyNASのOpenVPNの変更
<OpenVPN>
☑ TLS auth キーを認証  # 今回ついでに設定
☑ サーバー CNを認証  # 今回ついでに設定
☑ IPv6サーバモードを有効にする
 プレフィックス:xxxxxxx  #上記で「DHCPv6-PD」に変更すると選択します。


適用して、エクスポートします。

NASのFirewallを追加
 プレフィックスで追加したネットワークのアクセスを許可しました。

※ Firewallも関係する?調査は継続します
NASのネットワークにもアクセスができます。

VPNconfig.ovpnを以下に変更しました。


dev tun       # tun はルーティングベースのVPNを作成
tls-client        # tls-clientに戻しました

remote YOUR_SERVER_IP 1194 # 更に別のポートに変更しました。

auth-user-pass    # ユーザー名とパスワードによる認証を有効にする
 
# The “float” tells OpenVPN to accept authenticated packets from any address,
# not only the address which was specified in the –remote option.
# This is useful when you are connecting to a peer which holds a dynamic address
# such as a dial-in user or DHCP client.
# (Please refer to the manual of OpenVPN for more information.)
# float
# If redirect-gateway is enabled, the client will redirect it’s
# default network gateway through the VPN.
# It means the VPN connection will firstly connect to the VPN Server
# and then to the internet.
# (Please refer to the manual of OpenVPN for more information.)

redirect-gateway def1   # 全IPv4トラフィックをVPN経由
redirect-gateway ipv6   # ipv6を追加しました。

# dhcp-option DNS: To set primary domain name server address.
# Repeat this option to set secondary DNS server addresses.
# dhcp-option DNS DNS_IP_ADDRESS

# dhcp-option DNS 192.168.1.1  # HGWを設定 こちらは、削除しました。
dhcp-option DNS 2001:4860:4860::8888  #Googleに変更しました。
dhcp-option DNS 2001:4860:4860::8844

route-ipv6 2001:xxxx:xxxx:xxxx::/64  #NASのプレフィックスを追加しました。


tun-mtu 1400    #パケットサイズを変更しました。
mssfix 1300


pull     # サーバーからの設定を受け入れ

# If you want to connect by Server’s IPv6 address, you should use
# “proto udp6” in UDP mode or “proto tcp6-client” in TCP mode

proto udp6 #udp6に変更しました。

script-security 2 # スクリプトの実行許可レベルを設定

cipher AES-256-CBC
auth SHA256

verb 3       # 詳細ログを出力

<CA>
—–BEGIN CERTIFICATE—–
(最新のCA証明書データ1)
—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–
(最新のCA証明書データ2)
—–END CERTIFICATE—–
</ca>
key-direction1
<tls-auth>
….
</tls-auth>
verify-x509-name ‘xxxxx.synology.me’ name



※ 証明書が追加されています。


3/13追記 3/21に使用でききなくなった
VPNConfig.ovpnを以下に修正して使用しています。
当面、こちらで運用して問題がなければこのまま利用する予定です。


dev tun       # tun はルーティングベースのVPNを作成
clien
t        # tls-client を client に変更

remote YOUR_SERVER_IP 1194 # 1194は変更しています。

auth-user-pass    # ユーザー名とパスワードによる認証を有効にする
 
# The “float” tells OpenVPN to accept authenticated packets from any address,
# not only the address which was specified in the –remote option.
# This is useful when you are connecting to a peer which holds a dynamic address
# such as a dial-in user or DHCP client.
# (Please refer to the manual of OpenVPN for more information.)
# float
# If redirect-gateway is enabled, the client will redirect it’s
# default network gateway through the VPN.
# It means the VPN connection will firstly connect to the VPN Server
# and then to the internet.
# (Please refer to the manual of OpenVPN for more information.)

redirect-gateway def1   # 全IPv4トラフィックをVPN経由

# dhcp-option DNS: To set primary domain name server address.
# Repeat this option to set secondary DNS server addresses.
# dhcp-option DNS DNS_IP_ADDRESS

dhcp-option DNS 192.168.1.1  # HGWを設定

pull     # サーバーからの設定を受け入れ

# If you want to connect by Server’s IPv6 address, you should use
# “proto udp6” in UDP mode or “proto tcp6-client” in TCP mode

proto udp

script-security 2 # スクリプトの実行許可レベルを設定

cipher AES-256-CBC
auth SHA256


verb 3       # 詳細ログを出力

<CA>
—–BEGIN CERTIFICATE—–
(最新のCA証明書データ1)
—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–
(最新のCA証明書データ2)
—–END CERTIFICATE—–
</ca>

あとがき

Xpass、IPv6、VPNに関する知識が不足していることを痛感しています。
本記事の設定内容が正しいとは考えておらず、現地点ではUDP6接続時にアプリが動作しない原因を特定できていません。
⇒ OpenVPNの接続がIPv4経由で接続がでないため、IPv6での接続を試みIPv6が接続されたと推測される。OpenVPNの接続が確立された後は、IPv6のトンネルでIPv4での通信が行われてiPhoneからのアプリが接続される(3/11追記)

OpenVPN接続では、名前解決が出来ていないのか、ホスト名での接続ができません。現状、IPアドレスでの接続のみとなっています。それなのに、httpsポート番号での接続は可能です。ローカル環境での接続だとIPアドレスとホスト名両方で接続ができます。
⇒ OpenVPN接続なので、直接NASとiPhoneが接続されDNSを利用できないと判断します。ただし、NAS経由のネットワークからインターネットに接続する場合は、名前解決のためDNSは利用していると推測します。NASのFireWall設定もOpenVPN接続までで、iPhoneと直接接続されるとFireWallは関係ありません。(3/11追記)

https接続について
NASのネットワークにIPv6を有効にし(DDNSもIPv6対応を有効にすることで)、IPv4環境では「80番ポートのポートフォワーディング」が必要だった「https」接続が利用できるようになりました。IPv6ではフィルター開放なども不要です。これは、IPv6ではIPアドレス変換(NAT)が不要で、直接認証が可能と考えています。

⇒ 今後の修正は、IPv6の(VPNconfig.ovpn)の接続は課題が多くあり運用も大変です。今回の調査で得た知識で現状のipv4(VPNconfig.ovpn)を最適化したいと考えています。(3/11追記)

備忘録(おまけ)

テスト記録を残すために記載しました。こんなにトラブルとは考えていなかったので、接続テストの時系列が不明で作業チェックリストもなく、切り分け順番も定かではありませんが、備忘録として記載しました。

VPNServerの設定

□ IPv6サーバモードを有効にする
 チェックを入れると「プレフィックス:」の入力が必要になる。
 プレフィックスを選択できるようにするには、
「コントロールパネル」⇒「ネットワーク」⇒「ネットワークインターフェイス」⇒「LAN」で「編集」ボタンを選択する。
「IPv6」タブを選択する。
「IPv6設定:」を「自動」では「プレフィックス:」は選択できない ⇒ 「DHCPv6-PD」など他を選ぶ、どれが正しいかは不明。

・□ VPNリンクで圧縮を有効にする
 ⇒ チェックを外します。
 これを外さないと、OpenVPNでアプリが接続できません。

VPNconfig.ovpnの設定

黄色の部分を主に変更して接続テストを行った。

dev tun
tls-client
remote YOUR_SERVER_IP 1194

# resolv-retry infinite # DNS解決を無限にリトライ
# nobind # ローカルポートを固定しない
# persist-key # キー情報を接続間で保持
# persist-tun # トンネルデバイスを再起動後も維持

 
# The “float” tells OpenVPN to accept authenticated packets from any address,
# not only the address which was specified in the –remote option.
# This is useful when you are connecting to a peer which holds a dynamic address
# such as a dial-in user or DHCP client.
# (Please refer to the manual of OpenVPN for more information.)
# float
# If redirect-gateway is enabled, the client will redirect it’s
# default network gateway through the VPN.
# It means the VPN connection will firstly connect to the VPN Server
# and then to the internet.
# (Please refer to the manual of OpenVPN for more information.)

# redirect-gateway def1 # IPv4トラフィックをトンネル化
# redirect-gateway ipv6 # IPv6トラフィックをトンネル化
# route-ipv6 2000::/3 # グローバルIPv6をトンネル経由
# route 10.8.0.1 255.255.255.255


# dhcp-option DNS: To set primary domain name server address.
# Repeat this option to set secondary DNS server addresses.
# dhcp-option DNS DNS_IP_ADDRESS

# dhcp-option DNS 8.8.8.8
# dhcp-option DNS6 2001:4860:4860::8888
# dhcp-option DNS6 2001:4860:4860::8844


pull

# If you want to connect by Server’s IPv6 address, you should use
# “proto udp6” in UDP mode or “proto tcp6-client” in TCP mode

proto udp6

script-security 2
# comp-lzo
# reneg-sec 0

cipher AES-256-CBC
auth SHA512
auth-user-pass
<CA>
—–BEGIN CERTIFICATE—–

その他

DDNSの取得IP
・IPv4は、プロバイダの割り当てるルータのグローバル
・IPv6は、NASのアドレス

OpenVPNが接続に割り当てる「10.8.0.1」も関係するのか?
通常サーバ「NAS」が「10.8.0.1」が割り当てられる。
iphoneは、OpenVPN設定の接続数が「5」の場合は、「10.8.0.6」が割り当てられていた。

iphoneのアドレスにIPv6アドレスを使っての接続テストはおこなっていません。