皆さんいかがお過ごしでしょうか、最近寒くなってきて電気代が心配になる季節になってまいりました。
さて、私は静岡の実家を離れて東京都で生活をしているのですが、よく静岡の実家に帰省することがあります。
静岡の実家には10Gbpsのインターネット回線が整備されており、グローバルなIPv4アドレスもあるため、そこにサーバを設置して運用を行っています。
しかし、サーバを操作するときにいちいち接続するのも面倒なので、VPNによる常時接続を実現し、逆に実家にいるときに自宅のネットワークにアクセスできるように整備したためここにその方法などを書こうと思います。
この項目では、以下の3つのシチュエーションから互いに自由にアクセスできる環境の構築を目指します。
自宅
- NTT東日本フレッツ光
- 楽天ひかり IPv6 IPoE DS-Lite
- IPv4 CGNAT + IPv6 Global
- NEC IX2215
- ESXiホスト
実家
- コミュファ光 10Gbps
- IPv4 Global + IPv6 Global
- NEC製HGW
- ESXiホスト
リモート環境
- docomoなどのLTEテザリング環境
- IPv4 CGNATのみ
- iPhoneやMacBook
やりたいこと
- 実家のサーバから自宅のネットワークにアクセスでき
- 自宅のネットワークから実家のサーバにアクセスでき
- リモート環境から両方にアクセスできる
環境を作る
考慮しなくてはいけない注意点
- 携帯回線などリモートからアクセス環境には(基本的に)IPv6アドレスがない
- NTTのフレッツのIPoEではIPv4のグローバルアドレスがない
- vyOSの公式リファレンスが情報不足(書いてないオプション多数)
- vyOSのコマンド仕様が変わりまくるためググって出た情報がたいてい当てにならない
このため、リモート環境からNTTの拠点にアクセスするためには、グローバルなIPv4アドレスのある拠点を経由する必要があります。
今回は実家をリモートアクセスの拠点に利用する構成を行います。
構成図
実家と自宅の間を拠点間VPNで常時接続し、リモートアクセスは実家を経由して自宅までアクセスできるようにします。
このようにESXiのVMでvyOSを起動し、vSwitchにAPを接続することで、自分専用のネットワーク環境を用意することができます。
vyOSの設定
vyOSではIPv6を使ったIPv4のトンネリングをL2TPで行うことができません。
そのため、IPv6 L2TP/IPsecをローカルで作ったIPIP6トンネルで覆うことでIPv6トンネルの中にIPv4通信を流すことができます。
また、ルーティングはRIPで行い、実家を経由して自宅やそれ以外の拠点へ通信ができるようにします。
ローカルのIPIP6トンネルで利用するIPv6アドレスは適当なジェネレーターで生成するといいと思います。
https://www.ultratools.com/tools/rangeGenerator
interfaces {
ethernet eth0 {
address 10.1.1.1/24
}
ethernet eth1 {
address dhcpv6
address 192.168.1.10/24
ipv6 {
address {
autoconf
}
}
}
loopback lo {
}
tunnel tun0 {
address 10.11.32.7/24
encapsulation ipip6
local-ip fd46:0d8d:b809:bc56::1
multicast enable
remote-ip fdbb:94ab:f305:4392::1
}
}
nat {
source {
rule 98 {
outbound-interface eth1
source {
address 10.37.3.0/24
}
translation {
address masquerade
}
}
rule 99 {
outbound-interface eth1
source {
address 10.11.30.0/24
}
translation {
address masquerade
}
}
}
}
protocols {
rip {
network 10.0.0.0/8
network 172.16.0.0/12
redistribute {
connected {
}
}
}
static {
route 0.0.0.0/0 {
next-hop 192.168.1.1 {
}
}
route 10.77.3.0/24 {
next-hop 10.11.32.7 {
}
}
}
}
service {
dhcp-server {
shared-network-name MY_SUBNET {
authoritative
subnet 10.37.3.0/24 {
default-router 10.37.3.1
dns-server 1.1.1.1
range 0 {
start 10.37.3.100
stop 10.37.3.199
}
}
}
}
dns {
forwarding {
allow-from 10.37.3.0/24
listen-address 10.37.3.1
name-server 1.1.1.1
name-server 8.8.8.8
system
}
}
}
vpn {
ipsec {
esp-group rtr1-esp {
compression disable
lifetime 1800
mode tunnel
pfs enable
proposal 1 {
encryption aes256gcm128
hash sha512
}
}
ike-group rtr1-ike {
close-action none
dead-peer-detection {
action restart
interval 30
timeout 120
}
ikev2-reauth yes
key-exchange ikev2
lifetime 3600
proposal 1 {
dh-group 26
encryption aes256gcm128
hash sha512
}
}
ipsec-interfaces {
interface eth1
}
nat-networks {
allowed-network 0.0.0.0/0 {
}
}
nat-traversal enable
site-to-site {
peer 【接続先のIPv6アドレス】 {
authentication {
mode pre-shared-secret
pre-shared-secret 【事前共通鍵】
}
connection-type initiate
ike-group rtr1-ike
ikev2-reauth inherit
local-address 【自分のIPv6アドレス】
tunnel 0 {
allow-nat-networks disable
allow-public-networks disable
esp-group rtr1-esp
local {
prefix fd46:0d8d:b809:bc56::/64
}
remote {
prefix fdbb:94ab:f305:4392::/64
}
}
}
}
}
l2tp {
remote-access {
authentication {
local-users {
username 【ユーザ名】 {
password 【パスワード】
}
}
mode local
}
client-ip-pool {
start 10.11.30.100
stop 10.11.30.200
}
ipsec-settings {
authentication {
mode pre-shared-secret
pre-shared-secret 【事前共通鍵】
}
}
name-server 1.1.1.1
name-server 8.8.8.8
outside-address 192.168.1.10
}
}
}
このように10.11.32.7というローカルのIPIP6トンネルの出入り口を双方に配置して、通信することが必要ですが、この設定を行うことでリモートから実家を経由して自宅にアクセスすることが可能になります。
動作確認
大学からmacOSで実家のVPNサーバに接続してみます
無事接続できました。
自宅のサーバの管理画面などが見れます
また、IAP認証などとは違いブラウザベース以外のアプリケーションも利用できるので、自宅においたサーバにSSH接続したり、Sambaのドライブをマウントすることもできます。
おわりに
このような構成をすることによって、どこにいても自分の管理する情報にすぐアクセスできる環境を作ることができます。
みなさんも、実家に帰省する際などはこのようなシステムを作ってみると良いかもしれません。