それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

NTT フレッツ HGW(RP-500MI)のvpnサーバーに ubuntu からつなぐ

NTT フレッツ HGW(RP-500MI)のvpnサーバーに ubuntu からつなぐ

NTT が提供する ホームゲートウェイ・光コンバータ一・ひかり電話の一体型機器にはVPNサーバー機能がある。

NTT 東

NTT西

次のようにVPNサーバーのメニューが提供される

このVPNサーバー(L2TP/IPsec)にUbuntuから接続してみる。

準備

ホスト名のかわりに/etc/hsotsを使う。

cat <<EOF >> /etc/hosts
10.2.10.10 pr500.mi
EOF

ipsc の準備と接続

インストール

sudo apt install strongswan

ipsec 設定 - /etc/ipsec.conf - /etc/ipsec.secrets

コマンドから流し込む

## 設定
cat <<EOF >> /etc/ipsec.conf
conn vpn
  type=transport
  authby=secret
  rekey=yes
  keyingtries=1
  keyexchange=ikev1
  ike=aes256-sha-modp1024
  esp=aes256-sha1
  left=%any
  leftprotoport=udp/l2tp
  right=pr500.mi
  rightid=%any
  rightprotoport=udp/l2tp
  dpdaction=restart
  closeaction=restart
  auto=add ## 手動の場合
  # auto=start ## 自動接続をする場合

EOF
## 共有鍵
cat <<EOF >> /etc/ipsec.secrets
: PSK 3vBhtdpWkK7Ku4PxQnnj

ipsec の接続テスト

systemctl reload ipsec
ipsec status vpn
ipsec up vpn
ipsec down vpn
ipsec up vpn

接続の確認

Security Associations (1 up, 0 connecting):
         vpn[60]: ESTABLISHED 54 minutes ago,        

接続が確率(Established)すればOK。

これで SRC/UDP/1701 から DST/UDP/1701への通信が双方向で暗号化される。

細かく確認したいときは 過去記事:パケットがトンネルに入るか否かを確認する。(l2tp/ipsc)を参考にする

L2TP を接続する

インストール

sudo apt install xl2tpd 

xlt2pd の設定

cat <<EOF >> /etc/xl2tpd/xl2tpd.conf  

[lac pr500mi]
lns = pr500.mi
require authentication = yes
pppoptfile = /etc/ppp/options.l2tpd.pr500.mi
length bit = yes
require chap= yes
refuse pap = yes
ppp debug = yes
redial = yes
redial timeout = 10
max redials = 6
EOF

LACで使うPPP設定

cat <<EOF > /etc/ppp/options.l2tpd.pr500.mi
name my-user
password  my-password
mtu 1280
noauth
EOF

接続テスト

CTL=/var/run/xl2tpd/l2tp-control
sudo xl2tpd-control -d -c $CTL  available
sudo xl2tpd-control -d -c $CTL  connect-lac pr500mi
sudo xl2tpd-control -d -c $CTL  disconnect-lac pr500mi
sudo xl2tpd-control -d -c $CTL  status-lac pr500mi

うまく接続できないときは、自動起動を使わずに手動で起動する

## 自動起動を止めて
systemctl stop xl2tpd
systemctl disable xl2tpd
## 手動で起動する
/usr/sbin/xl2tpd -D \
   -c /etc/xl2tpd/xl2tpd.conf  \
   -C /var/run/xl2tpd/xl2tpd-control
## ログを見ながら試す
CTL=/var/run/xl2tpd/xl2tpd-control
xl2tpd-control -d -c $CTL  available
xl2tpd-control -d -c $CTL  connect-lac pr500m

無事に接続できた。

接続済みになるはずである。

IPアドレスがわからなくなる。

NTTのHGWのPPPoEのIPアドレスがわからなくなるので、通知をSMTPですることが可能だが。メールでIPを通知させることができる。

ただこれ見てる限り、SMTPSには未対応っぽいので、現在ではまるで使えないと思う。

v6 アドレスについて

NTTの仕様を確認したが、v6アドレス(フレッツ網v6・IPoEアドレス)でVPNを張ることはできない。

ただし、IPv6・PPPoEであれば接続が可能かと思われる。

raspi などでddns

ddns(mydns.jp など) を使うなり、ドメインを何処かホスティング(Cloudflare・Route53)するなりして、IPアドレスがわかるようにAレコードを更新するとか、Raspiで定期的に書き込みに行くしかしかない。

IPoE/IPv6環境であれば、v6アドレスは変わらないので、v6アドレス経由でSSHできるようにして、SSHしてからPPPoEのアドレスをコマンドで確認するしかない。

v6アドレスであれば、VPNなどしなくてもSSH環境が用意に作れるので、VPN環境をわざわざ作る必要もないが、SSH踏み台としてのRaspiがダウンしたときとか予備回線として有能である。

バージョン

利用したソフトウェアのバージョンについて。

apt で導入された一覧

strongswan/jammy-updates,jammy-security,now 5.9.5-2ubuntu2.1 all [installed]
xl2tpd/jammy-updates,now 1.3.16-1ubuntu0.1 arm64 [installed]
Ubuntu 22.04.2 LTS # /etc/lsb-release 
xl2tpd version:  xl2tpd-1.3.16 # xl2tpd -v 
Linux strongSwan U5.9.5/K5.15.0-1034-raspi # ipsec --version

速度テスト

簡易な速度テストの結果です。 VPNありだと、VPNなし(サーバクライアント側双方は60-80Mbps程度)に比べて15-20%程度に速度低下しました。MTUなどで改善の余地はあるかもしれないけど、NATやパケット化やカプセル化によるスループットの低下は相当大きいと思われる。

速度についてはISPのアップロード制限(PPPoE同士)やHGWの性能の上限にぶち当たる。といういくつかの要因が考えられる。

常用するVPNであれば、Wireguardや単純なIPSecやikev2のほうが良いかもしれない。

関連記事

参考資料