アフィリエイト広告を利用しています

VyOS 1.4でIPv6 IPsec VPNを構築する

家のネットワーク環境が変わり、HGWの設定不可、以前のようなIPoEのMAP-Eの特定ポートでポート開放も出来なくなり唯一IPv6が利用出来るので自宅=実家間をVyOS 1.4でIPv6 IPsec VPNを組んでみました。
ちなみにMAP-E環境の特定ポートでポート開放する記事はこちら
Cloudflare WorkersでMAP-E環境でWebサーバを公開する

環境

今回以下の構成で組んでみました。

IPv6 IPsec VPN構成図

vyos@vyos:~$ show version
Version:          VyOS 1.4-rolling-202304130846
Release train:    current

Built by:         [email protected]
Built on:         Thu 13 Apr 2023 08:46 UTC
Build UUID:       1d949ed4-c78a-4abb-a849-8f0d7617acd3
Build commit ID:  e52a5136ef375e

Architecture:     x86_64
Boot via:         installed image
System type:      VMware guest

VyOSの設定

Branch

vyos@vyos:~$ show configuration commands
set interfaces ethernet eth0 address 2001:db8::2:1000/112
set interfaces loopback lo
set interfaces vti vti0
set interfaces vti vti0 address 192.0.2.100/24
set protocols static route 192.168.1.0/24 interface vti0
set service ntp allow-client address '0.0.0.0/0'
set service ntp allow-client address '::/0'
set service ntp server time1.vyos.net
set service ntp server time2.vyos.net
set service ntp server time3.vyos.net
set service ssh disable-password-authentication
set service ssh listen-address '192.0.2.100'
set system config-management commit-revisions '100'
set system conntrack modules ftp
set system conntrack modules h323
set system conntrack modules nfs
set system conntrack modules pptp
set system conntrack modules sip
set system conntrack modules sqlnet
set system conntrack modules tftp
set system console device ttyS0 speed '115200'
set system host-name 'vyos'
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'

set vpn ipsec authentication psk hq id '2001:db8::1:1000'
set vpn ipsec authentication psk hq secret 'key'
set vpn ipsec esp-group hq proposal 1 encryption 'aes256'
set vpn ipsec esp-group hq proposal 1 hash 'sha512'
set vpn ipsec ike-group hq key-exchange 'ikev2'
set vpn ipsec site-to-site peer hq authentication local-id '2001:db8::2:1000'
set vpn ipsec site-to-site peer hq authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer hq authentication remote-id '2001:db8::1:1000'
set vpn ipsec site-to-site peer hq ike-group 'hq'
set vpn ipsec site-to-site peer hq local-address '2001:db8::2:1000'
set vpn ipsec site-to-site peer hq remote-address '2001:db8::1:1000'
set vpn ipsec site-to-site peer hq vti bind 'vti0'
set vpn ipsec site-to-site peer hq vti esp-group 'hq'

HQ

vyos@vyos:~$ show configuration commands
set interfaces ethernet eth0 address 2001:db8::1:1000/112
set interfaces loopback lo
set interfaces vti vti0
set interfaces vti vti0 address 192.168.1.100/24
set protocols static route 192.0.2.0/24 interface vti0
set service ntp allow-client address '0.0.0.0/0'
set service ntp allow-client address '::/0'
set service ntp server time1.vyos.net
set service ntp server time2.vyos.net
set service ntp server time3.vyos.net
set service ssh listen-address '192.168.1.100'
set system config-management commit-revisions '100'
set system conntrack modules ftp
set system conntrack modules h323
set system conntrack modules nfs
set system conntrack modules pptp
set system conntrack modules sip
set system conntrack modules sqlnet
set system conntrack modules tftp
set system console device ttyS0 speed '115200'
set system host-name 'vyos'
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'

set vpn ipsec authentication psk branch id '2001:db8::2:1000'
set vpn ipsec authentication psk branch secret 'key'
set vpn ipsec esp-group branch proposal 1 encryption 'aes256'
set vpn ipsec esp-group branch proposal 1 hash 'sha512'
set vpn ipsec ike-group branch key-exchange 'ikev2'
set vpn ipsec site-to-site peer branch authentication local-id '2001:db8::1:1000'
set vpn ipsec site-to-site peer branch authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer branch authentication remote-id '2001:db8::2:1000'
set vpn ipsec site-to-site peer branch ike-group 'branch'
set vpn ipsec site-to-site peer branch local-address '2001:db8::1:1000'
set vpn ipsec site-to-site peer branch remote-address '2001:db8::2:1000'
set vpn ipsec site-to-site peer branch vti bind 'vti0'
set vpn ipsec site-to-site peer branch vti esp-group 'branch'

接続確認

vyos@vyos:~$ show vpn ipsec sa
Connection    State    Uptime    Bytes In/Out    Packets In/Out    Remote address                       Remote ID                            Proposal
------------  -------  --------  --------------  ----------------  -----------------------------------  -----------------------------------  ---------------------------------------
branch-vti      up       18m47s    357K/1M         4K/4K             2001:db8::1:1000  2001:db8::2:1000  AES_CBC_256/HMAC_SHA2_512_256/MODP_1024

VyOSの接続ログは journalctl -ru strongswan 、設定は/etc/swanctl/swanctl.conf で確認出来ます。

ポイント

VyOSではVTI(Virutla Tunnel Interface)によるルートベースVPNで以下の通りIPv4,IPv6ともにトラフィックセレクタとして設定されます。このためIPv6のIPsec VPNが確立し、VyOSにIPv4の通信がフォワーディングされたら、IPv6 IPsec VPNを経由したIPv4パケット転送が可能です。

root@vyos:/home/vyos# grep 0.0.0.0 /etc/swanctl/swanctl.conf
                local_ts = 0.0.0.0/0,::/0
                remote_ts = 0.0.0.0/0,::/0

逆に言えばIPv4のIPsec VPNの場合でも、VyOSにIPv6のアドレス設定を行い、フォワーディングすればIPv4 IPsec VPNを経由したIPv6パケットの転送も可能です。

まとめ

今回VyOS 1.4でIPv6 IPsec VPNでVPNを構築してみました。IPv6 VPNでもVTIでIPv6,IPv4両方の通信を簡単に転送出来ました。 最近のお家の備え付けインターネットは割とHGWの設定不可、IPv6は降ってくる(さすがにそうじゃないとまずい😅)傾向なので、IPv4でポート開放というより、IPv6環境でIPv4のクライアントに対してもWebサーバーの通信を通すようなテクニックが個人的に求められるのかなと思いました。逆にIPv6さえ使えて、IPv6でサーバーを公開する前提に立てば、MAP-EやDS-LiteだからIPv4のポート開放は…と複雑に考えなくて良いかもしれません。そういった意味で CloudflareとIPv6でMAP-E環境でWebサーバを公開する で紹介したCloudflareを活用したWebサーバーの公開、あとは出先からはモバイル端末でIPv6からアクセス出来る足回りを持っていれば、sshなどは直接自宅のサーバーにIPv6でアクセスする組み合わせが出来るかなと思います。

Share Comments こ>のエントリーをはてなブックマークに追加
comments powered by Disqus