【線】IPSec/L2TPでVPNをやう@StrongSwan
追記:外から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が正常に接続したら、このログが出る
クライアントから接続
Windowsなら、ネットワーク設定からVPN接続が設定できます。余計な、ソフトインストールは不要です。
あとは接続を押せば、接続できる事を確認できるかと思う。
他の接続方法だと、細かな設定をしたい場合がある、そんな時は、「アダプターのオプションを変更する」から、コントロールパネルから設定できる。
こんな画面です。ここで構築してるレベルの底辺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ポート)
見た感じ、設定も楽だし、速度も結構出るらしい。
・・と書いて気付いた。
既に、他サービスで利用してた事に・・・。
(;^ω^)
追記:外から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などの仕組みが無く、フィルターだけで守られてるシンプルな環境だという事が理解できます。
ディスカッション
コメント一覧
まだ、コメントがありません