【線】IPSec/L2TPでVPNをやう@StrongSwan

2021年1月26日プライベートipsec,linux,server,ubuntu,vpn

image

追記:外からPing疎通確認

追記:自分の環境では利用不可やった@理由

もろスタンダードなIPSec/L2TP(IKEv1)によるVPNを構築しようと触ってたのです(アプリを必要とせず、スマホやPCからでも使えるというレベルの代物)

そないに難しい事ないやろ・・。

・・と思っていた、10時間前の俺。

:(;゙゚’ω゚’):

や・・やっと、接続でけた。なんという時間泥棒。

環境

UbuntuServer20.04LTSを入れた、極古PCをVPNサーバとして動作させる目的でした。

ほんとに超古くて、Pentium E2160(Core2の下)・RAM4GB、WinXP時代の化石並だが、64ビットOSは動作してくれる。

VPNサーバは、単純に外からの接続に対して受けるだけのもので、他所への常時トンネルとかでは無い。

構築

※記事ではネットワーク関係の設定は省きます(NATやFireWallとか)

必要なのは、これだけ。strongswanとxl2pd、このセットで動作してくれる。

sudo apt install strongswan xl2tpd

あとは設定をするだけなのですが。。

ネット上にあるサンプルを見ながら、継ぎ足しでこしらえたんですが、それが問題だった。つまり、余計なモノを書くと、動かないという訳だ。

VPNとは言っても、色々な形態パターンがあるので、ネット上のサンプルを全て鵜呑みには出来ないのだ。

以下は、ローカルLAN内だけの無意味なVPN設定の例、赤字で重要なところに追記しました。leftはサーバ側、rightは接続側

sudoedit /etc/ipsec.conf

※以下は古い書き方ですが一応通ります

config setup
conn vpn ただの設定名・複数書ける
   type=transport 左から右へ受け流すだけ
   authby=secret PSKと同じ意味(事前共有鍵)
   rekey=no
   keyingtries=1
   keyexchange=ikev1 IKEv1による打合せ
   ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024 暗号の種類(Win10に合わせてる)
#  ikelifetime=14400s
   esp=aes256-sha256,aes256-sha1,3des-sha1 パケ暗号
   leftid=192.168.2.10 サーバのID(IPにするのが慣習?)
   left=192.168.2.10 サーバのIPアドレス
   leftsubnet=192.168.2.0/24
   leftikeport=4500
   leftprotoport=17/1701 UDP・L2TP
#  leftfirewall=yes FireWall越しならyes
   right=%any 接続側のIPアドレス
#  rightid= 無指定なら自動でID振られる
#  rightprotoport=17/%any
#  rightikeport=4500
#  rightauth=psk (こやつが問題だった)
   forceencaps=no WinならNo推奨らしい
#  lifetime=14400s
   dpddelay=30
   dpdtimeout=120
   dpdaction=clear
#  compress=yes
   auto=add 常時接続でないならaddでOK

とにかく何をやっても、以下のエラーが出て、先に進まない状態が数時間続いたのです。

ログを見る限り、IKEの先へ進んでるのは確認してるけど、こっからどんな設定しても、微動だにしない。PSKの認証を認めてくれないのだ。

08[IKE] found 1 matching config, but none allows pre-shared key authentication using Main Mode

今になって考えればもっともなんですけどね。。既に、authby=secretでPSKの指定済ませてるにも関わらず、rightには、PSKじゃ!と決めてかかってた訳です。

あと、ike= と、esp= と書かれてる部分。

暗号化の種類を記載するのですが、接続しにくるデバイスによって、サポートしてる暗号が”もちろん”違うので、Android/iPhoneスマホや、Apple Macパソコンと対応を広げていくたんびに、どんどん絞られていく。

上記で書かれたものは、実際に、公式で案内されたものなので、より多くのデバイスで対応したいなら、これになるかと思う(極端に古いPCやゲーム機、ネット機器だと、厳しくなりそうです)

後の設定は簡単です。以下に、PSKを。

sudoedit /etc/ipsec.secrets

: PSK “つらつらとパスワード"

1文字目に:が来るようにする。leftid、rightidでPSKやEPAに書き分ける事もできる。

L2TP設定は以下のファイルに。設定ファイルがコメントだらけで見難いがしょうがない。

sudoedit /etc/xl2tpd/xl2tpd.conf

[global]
port = 1701
auth file = /etc/ppp/chap-secrets
[lns default]
ip range = 192.168.2.180-192.168.2.189 ; 適当な配布IP範囲
local ip = 192.168.2.10 サーバのアドレス
length bit = yes
refuse pap = yes
refuse chap = no
require authentication = yes
name = vpn
pppoptfile = /etc/ppp/options.l2tpd.lns;

ユーザー毎のパスワードは以下に。

sudoedit /etc/ppp/chap-secrets

id-kasu      vpn       pw12345678        *

接続用のオプション設定

sudoedit /etc/ppp/options.l2tpd.lns

name vpn
ipcp-accept-local
ipcp-accept-remote
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2 mschapv2だけ有効
nodefaultroute
nobsdcomp
mtu 1300 MTUは各自調整の事
mru 1300 ここも
logfile /var/log/xl2tpd.log l2tpログの場所*
persist

※VPNが正常に接続したら、このログが出る

クライアントから接続

image

Windowsなら、ネットワーク設定からVPN接続が設定できます。余計な、ソフトインストールは不要です。

image

あとは接続を押せば、接続できる事を確認できるかと思う。

image

他の接続方法だと、細かな設定をしたい場合がある、そんな時は、「アダプターのオプションを変更する」から、コントロールパネルから設定できる。

image

こんな画面です。ここで構築してるレベルの底辺L2TPなら、不要です。

おまけ

いろんな設定をやりながらログを見てました。

IKE(接続手順)やらで指定するものをプロポーサルとかログで言ってるんですが、どこかのタイミングでこんなログが出てました。

VPN接続のやり取りを見てるようで興味深いです。

これは、接続側(Windows10)が利用できる暗号化ですよーーというリストらしい。MODP_1024だけという、見ての通り、しょっぱい。

IKE:3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024,
IKE:AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024,
IKE:3DES_CBC/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_1024,
IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_1024,
IKE:3DES_CBC/HMAC_SHA2_384_192/PRF_HMAC_SHA2_384/MODP_1024,
IKE:AES_CBC_256/HMAC_SHA2_384_192/PRF_HMAC_SHA2_384/MODP_1024

ここから下は、VPNサーバが対応してる暗号化ですよーーーというリスト。

まだ、IKE設定を弄り始めた事のログなので、MODP_8192やらが見える。8192ビットとか途方もないビット数。

IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_3072,
IKE:AES_CBC_128/AES_CBC_192/AES_CBC_256/CAMELLIA_CBC_128/CAMELLIA_CBC_192/CAMELLIA_CBC_256/3DES_CBC/HMAC_SHA2_256_128/HMAC_SHA2_384_192/HMAC_SHA2_512_256/HMAC_SHA1_96/AES_XCBC_96/PRF_HMAC_SHA2_256/PRF_HMAC_SHA2_384/PRF_HMAC_SHA2_512/PRF_AES128_XCBC/PRF_HMAC_SHA1/ECP_256/ECP_384/ECP_521/ECP_256_BP/ECP_384_BP/ECP_512_BP/CURVE_25519/CURVE_448/MODP_3072/MODP_4096/MODP_6144/MODP_8192/MODP_2048,
IKE:AES_GCM_16_128/AES_GCM_16_192/AES_GCM_16_256/CHACHA20_POLY1305/AES_GCM_12_128/AES_GCM_12_192/AES_GCM_12_256/AES_GCM_8_128/AES_GCM_8_192/AES_GCM_8_256/PRF_HMAC_SHA2_256/PRF_HMAC_SHA2_384/PRF_HMAC_SHA2_512/PRF_AES128_XCBC/PRF_HMAC_SHA1/ECP_256/ECP_384/ECP_521/ECP_256_BP/ECP_384_BP/ECP_512_BP/CURVE_25519/CURVE_448/MODP_3072/MODP_4096/MODP_6144/MODP_8192/MODP_2048

追記:自分の環境では利用不可やった@理由

自分のネット環境は、IPoE/Transix系だった事(まずIPv4での希望が消える)に加え・・・

利用してるルータで、IPv6フィルタ設定が出来ない事が、”今”判明・・・・

つまり、IPv6でも利用不可って事です。

(;´Д`)

エレコムです、エレコム製です、えれこむのやつです。やっぱ、エレコムです。

唯一の設定画面では、そもそもIPv6アドレスを入力する事ができません(エラーになる)

もしや既に、フィルターがそもそも存在してないのか?(まさか全スルー?)と思い、しっかり、HGWのフィルターを無効にして外からアクセスして確認しました。

じゃ、そんなルータ使わず、HGWでやればいいじゃないか!と思われるかもしれない。

否、Transix系(DS-Lite)は、それが許されないのであるw

(;´Д`)

そもそも、StrongSwan(IPSec/L2TP)でやろうとすると、ポートが固定で変更ができないので、あまり理想的ではなかった(500/4500/1701)

OpenVpnだとポート変更が可能なので、IPv6はもちろんの事、IPv4でもイケるが、それぞれにアプリやらを導入しないといけない・・。

※TransixやMAP-Eでも、許可されたポートを使えばいい(240ポート)

見た感じ、設定も楽だし、速度も結構出るらしい。

・・と書いて気付いた。

image

既に、他サービスで利用してた事に・・・。

(;^ω^)

追記:外からPing疎通確認

海外のサービスなので自己責任においてですが、外から実際に利用できるか疎通確認できます。

http://www.ipv6now.com.au/pingme.php

有りそうで、IPv6で確認できるサイトって、あまり無い。

HGWで、IPv6フィルターを標準にして、ICMPv6を通過するようにすれば、実際にピンが通る事を確認できると思います。

上記事にも書きましたが、エレコムルータでは、ICMPスルーの設定ができないので、自分が確認したのはエレコムのルータまでのピン疎通確認だけです。

※Transix(DS-Lite)ユーザーだと、IPセグメントがHGW側とルータ内側で違うので注意(HGW設定の際)

ICMPをスルーできるルータをお持ちの方、或いはHGW直結で利用されてる場合は、そのまま、パソコンのIPv6アドレスでピンが通るか確認できます・・が。

通常は、パソコン側で拒否されてるので、パソコン側のファイヤーウォールでICMPを有効にします。

IPv6であれば、NATなどの仕組みが無く、フィルターだけで守られてるシンプルな環境だという事が理解できます。

2021年1月26日プライベートipsec,linux,server,ubuntu,vpn

Posted by nabe