IPsec:EAP-MSCHAPv2: macOS sierraのセットアップ

GW側の設定はWindows用ののconnに設定を付け加えるだけで両方で使えるようになります。証明書のp12ファイルは、Apple Configurator 2のCertificatesでインストールします。

調整してみた結果、次の設定が安定しています。

IKESecurityAssociationParameters

  • EncryptionAlgorithm –> 3DES
  • IntegrityAlgorithm –> SHA1-96
  • DiffieHellmanGroup –> 14

ChildSecurityAssociationParameters

  • EncryptionAlgorithm –> AES-256
  • IntegrityAlgorithm –> SHA1-96
  • DiffieHellmanGroup –> 14
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>PayloadContent</key>
 <array>
 <dict>
 <key>IKEv2</key>
 <dict>
 <key>AuthenticationMethod</key>
 <string>Certificate</string>
 <key>CertificateType</key>
 <string>RSA</string>
 <key>ChildSecurityAssociationParameters</key>
 <dict>
 <key>DiffieHellmanGroup</key>
 <integer>14</integer>
 <key>EncryptionAlgorithm</key>
 <string>AES-256</string>
 <key>IntegrityAlgorithm</key>
 <string>SHA1-96</string>
 <key>LifeTimeInMinutes</key>
 <integer>1440</integer>
 </dict>
 <key>DeadPeerDetectionRate</key>
 <string>Medium</string>
 <key>DisableMOBIKE</key>
 <integer>0</integer>
 <key>DisableRedirect</key>
 <integer>0</integer>
 <key>EnableCertificateRevocationCheck</key>
 <integer>0</integer>
 <key>EnablePFS</key>
 <integer>0</integer>
 <key>ExtendedAuthEnabled</key>
 <true/>
 <key>IKESecurityAssociationParameters</key>
 <dict>
 <key>DiffieHellmanGroup</key>
 <integer>14</integer>
 <key>EncryptionAlgorithm</key>
 <string>AES-128</string>
 <key>IntegrityAlgorithm</key>
 <string>SHA1-96</string>
 <key>LifeTimeInMinutes</key>
 <integer>1440</integer>
 </dict>
 <key>LocalIdentifier</key>
 <string>myname@local.net</string>
 <key>PayloadCertificateUUID</key>
 <string>0CC288E5-712A-425F-9A41-8B21794D4981</string>
 <key>RemoteAddress</key>
 <string>vps.net.jp</string>
 <key>RemoteIdentifier</key>
 <string>vps.net.jp</string>
 <key>ServerCertificateCommonName</key>
 <string>vps.net.jp</string>
 <key>ServerCertificateIssuerCommonName</key>
 <string>Root CA</string>
 <key>UseConfigurationAttributeInternalIPSubnet</key>
 <integer>0</integer>
 </dict>
 <key>IPv4</key>
 <dict>
 <key>OverridePrimary</key>
 <integer>0</integer>
 </dict>
 <key>PayloadDescription</key>
 <string>Configures VPN settings</string>
 <key>PayloadDisplayName</key>
 <string>VPN</string>
 <key>PayloadIdentifier</key>
 <string>com.apple.vpn.managed.7D1BAE6B-BB09-4D75-A491-0CB79AB8CDBC</string>
 <key>PayloadType</key>
 <string>com.apple.vpn.managed</string>
 <key>PayloadUUID</key>
 <string>7D1BAE6B-BB09-4D75-A491-0CB79AB8CDBC</string>
 <key>PayloadVersion</key>
 <integer>1</integer>
 <key>Proxies</key>
 <dict>
 <key>HTTPEnable</key>
 <integer>0</integer>
 <key>HTTPSEnable</key>
 <integer>0</integer>
 </dict>
 <key>UserDefinedName</key>
 <string>vps</string>
 <key>VPNType</key>
 <string>IKEv2</string>
 </dict>
 </array>
 <key>PayloadDisplayName</key>
 <string>ikv2.ganesha</string>
 <key>PayloadIdentifier</key>
 <string>MacBook-Pro.AE02AE03-C4D1-45E9-A757-2A5960EC718B</string>
 <key>PayloadRemovalDisallowed</key>
 <false/>
 <key>PayloadType</key>
 <string>Configuration</string>
 <key>PayloadUUID</key>
 <string>E2FBB090-B158-435D-B190-C8A392A24C08</string>
 <key>PayloadVersion</key>
 <integer>1</integer>
</dict>
</plist>

 

保存した設定ファイルをクリックするとprofilesに登録できるのでそのまま設定のNetworkパネルで使うことができます。

Authentication Settings…をクリックしユーザー名とパスワードを入れてConnectボタンを押します。

サーバーのGW側の設定例です。

ipsec.conf:

config setup 
 plutostart=no

conn %default 
 ikelifetime=60m 
 keylife=20m 
 rekeymargin=3m 
 keyingtries=1 
 keyexchange=ikev2

conn common 
 # left=%any 
 left=xxxxxxxx.vps.xxxxx.jp 
 leftcert=vpnServerCert.pem 
 leftsourceip=%config 
 leftid=xxxxxxxx.vps.xxxxx.jp 
 leftauth=pubkey 
 leftfirewall=yes

conn vpn-client-windows-macos 
 leftsubnet=0.0.0.0/0 
 leftsendcert=always 
 right=%any 
 rightsourceip=192.168.200.0/24 
 rightauth=eap-mschapv2 
 ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024! 
 esp=aes256-sha256,aes256-sha1,3des-sha1! 
 dpdaction=clear 
 dpddelay=300s 
 rekey=no 
 reauth=no 
 fragmentation=yes 
 eap_indentity=%any 
 #leftdns=xx.xx.xx.254 
 rightdns=8.8.8.8 
 also=common 
 auto=add

 

 

L2TP-IPsecでVPNを構築

L2TP-IPsecは幅広い機器で採用されているので、strongSwanで設定してみることにしました。

設定の結果、アンドロイドのスマホとSnow LeopardのOSXでようやく接続することができました。LinuxはNetworkManagerのL2TPプラグインのパッケージがないため接続できませんでした。NetworkManagerを使わず旧来のやり方であれば接続は可能です。

ネットワークの構成

test 1:
Android(6.0.1,CM13.0.20) -- Internet --+: VPS(Debian 8) -- VM(VPN,Debian 8)

test 2:
Android(6.0.1,CM13.0.20) -- Router +:-- Internet --+: VPS(Debian 8) -- VM(VPN)
OS X(Snow Leopard) -- Router +:-- Internet --+: VPS(Debian 8)-- VM(VPN,Debian 8)

Note: (+)はfirewall,(:)はNAT

サーバー用GWのパッケージ

strongswan(aptで一式、他にディストリビューションによっては必要なパッケージがあります)
xl2ptd
ppp

なおGuest側のアドレス割り付けはl2tpサーバが行うのでDHCPサーバのインストールは不要です。

サーバ側のポートのオープンまたはポートフォワーディングは次のとおりです。

port 50
port 51
udp 500
udp 1701
udp 4500

GWのstrongSwanの設定例

/etc/ipsec.conf:

config setup

conn L2TP-PSK-NAT 
   forceencaps=yes 
   authby=secret 
   auto=add 
   keyexchange=ikev1 
   keyingtries=3 
   ike=aes128-sha1-modp2048 
   esp=aes128-sha1-modp2048 
   rekey=no 
   ikelifetime=8h 
   lifetime=1h 
   type=transport 
   left=192.168.2.1  # VPS内の仮想VMサーバのアドレス
   leftprotoport=17/1701 
   right=%any 
   rightsubnet=0.0.0.0/0 
   rightprotoport=17/%any 
   dpddelay=40 
   dpdtimeout=130 
   dpdaction=clear

include /var/lib/strongswan/ipsec.conf.inc
/etc/ipsec.secret:

# "hello_world"は共通鍵(要変更)
: PSK "hello_world"

include /var/lib/strongswan/ipsec.secrets.inc
/etc/strongswan.conf:

charon { 
 load_modular = yes 
 plugins { 
 include strongswan.d/charon/*.conf 
 } 
 dns1 = 8.8.8.8 # VPSに割り当てられたDNSでも可
}

include strongswan.d/*.conf

xl2tpdの設定例

/etc/xl2tpd/xl2tpd.conf:

[global]

port = 1701 
access control = no

[lns default] 
ip range = 192.168.2.100-192.168.2.125 
local ip = 192.168.2.1 
length bit = yes 
refuse chap = yes 
require authentication = yes 
name = l2tp 
pppoptfile = /etc/ppp/options.xl2tpd
/etc/xl2tpd/l2tp-secrets:

(設定なし)
/etc/ppp/options.xl2tpd:

name l2tp 
refuse-pap 
refuse-chap 
refuse-mschap 
require-mschap-v2 
ms-dns 8.8.8.8 # VPSに割り当てられたDNSでも可 
proxyarp 
nodefaultroute 
lock 
nobsdcomp 
mtu 1280 
mru 1280
/etc/ppp/chap-secrets:

# client server secret IP addresses 
pokemon * pikatyu * # パスワード要変更

システム変数の設定

/etc/sysctl.d/99-sysctl.conf:

net.ipv4.ip_forward = 1 
net.ipv4.conf.all.send_redirects = 0 
net.ipv4.conf.all.accept_redirects = 0 
net.ipv4.conf.default.send_redirects = 0 
net.ipv4.conf.default.accept_redirects = 0 
net.ipv4.conf.eth0.send_redirects = 0 
net.ipv4.conf.eth0.accept_redirects = 0 
net.ipv4.conf.lo.send_redirects = 0 
net.ipv4.conf.lo.accept_redirects = 0

ログの表示

journalctl -u strongswan -f -l | tee log

テスト

ipsec start --nofork

 

IPsec:EAP-MSCHAPv2: WIndows 7のセットアップ

Windows 7でEAP-MSCHAPv2のセットアップでstrongSwanサイトの設定でよかったが認証でエラーが起こったため調べて設定したときのメモです。

CAはあらかじめp12形式に変換したものをWindows 7において置き、管理者権限でmmcを実行しFile>Add/Remove Snap in…からCetificates選択しComputer accountでsnap-inする。Console RootからTrust Root Certification Authorities>Certificatesに移動してp12形式のCAをインポートします。

Nework ConnectionsにつくったVPNアイコンのプロパティのセキュリティタブは下図のように設定しています。

Control PanelからNetwork and Sharing Centerを開き、Set up a new connection or network -> Connect to a workplaceを選択します。そしてUse my Internet connectionを選択します。

次にInternet address:をFQDNで入力します。そしてDon’t connect now; just set it up I can connect laterチェックして、Nextボタン、次にCreateボタンを押してウィンドゥを閉じます。

次にネットワークの設定に戻り、Change adaptor settingsを選択し新しくできたVPNのアイコンのプロパティ画面を開き次のように設定します。

設定が済んだらトレイのネットワークアイコンをクリンクしてVPN接続を行います。

トラブルシュート

次のようなエラーが起きた場合の対処法です。

検索してみたところ次のように設定します。

管理者権限でregeditを開き次のディレクトリに移動します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters

DWORDを追加しNameDisableIKENameEkuCheckとしValue Data1とします。

Windows 7側のmtuの設定

ipsec属性をipヘッダーに付け加えるためmtuサイズが大きくなり調整する必要があるかも知れません。Windowsの場合は少し設定が煩雑です。ネットワークの一覧表示はDOS画面から次のようにします。

netsh interface ipv4 show subinterface

どのインターフェースをターゲットにするかわかったら次の例のようにします。この例ではmtuは1352に設定します。

netsh interface ipv4 set subinterface "VPN名" mtu=1352 store=persistent

最後にサーバーのゲートウェイのipsec.confの設定を参考に載せておきます。

config setup
 plutostart=no

conn %default
 ikelifetime=60m
 keylife=20m
 rekeymargin=3m
 keyingtries=1
 keyexchange=ikev2

conn common
 left=xxxxxxx.vps.xxxxx.jp
 leftcert=vpnServerCert.pem
 leftsourceip=%config
 leftid=xxxxxxx.vps.xxxxx.jp
 leftauth=pubkey
 leftfirewall=yes

conn vps-client-windows
 leftsubnet=0.0.0.0/0
 right=%any
 rightsourceip=192.168.200.0/24
 rightauth=eap-mschapv2
 eap_indentity=%any
 ike=aes256-sha1-modp1024!
 esp=aes256-sha1!
 dpdaction=clear
 dpddelay=300s
 rekey=no
 leftdns=xx.xx.xx.254
 also=common
 auto=add

References

Buffalo WMR-300 トラベルルーターにOpenWrtをインストール

OpenWrtを入れられる小型ルーターはいくつかありますが、バッファローのルーターはある程度スペックをクリアしてるのと値段がなんと言っても手頃なので安心して使えます。ほかにはRavPower RP-WD02なんてマイクロSDリーダーにUSBポート、さらにバッテリーまでついて魅力的だがに日本では販売してないので、海外から取り寄せる送料を考えたら現実的ではありません。そこででバッファローという選択になりますが、100%とは言えないまでもスペック的にはそこそこ満足できる製品がこのトラベルルーターです。

早速、OpenWrtを入れてみることにしました。インストール方法は簡単ですが準備がそれなりに必要です。というのも最初にRAMにロードするFWを作る必要があります。そこでVBに開発環境を作りDebian 8(64bit)をインストールしてみました。つぎにOpneWrtのソースをgitで持ってきてサイトBuffalo WMR-300にある要領で作りファームウェア(以下FW)をtftpで送り込んでみました。debianのtfpd-hpaはinetデーモンも必要なのでインストールして設定しておく必要があります。FWをRAMに送り込んだら設定画面にアクセスして公式FWにアップグレードすれば、めでたくインストールは完了します。私が作ったFWは次のところにあります。

WMR-300 Custom ROM

Image Generatorを使ったファームウエアの作成

トラベルルーターのフラッシュメモリの容量が8MBと限られているので必要なパッケージのみで構成したカスタムファームウェアを作成しました。usbはどうも電源を取るだけのものらしいので関連のパッケージを外しておきました。Image Builderを使うとソースからビルドするより簡単に作成することができます。

OpenWrt-ImageBuilder-15.05.1-ramips-mt7620.Linux-x86_64.tar.bz2

Image Generator (Image Builder) – EN

Image 1:

#!/bin/sh

make image PACKAGES=\
"libiwinfo libiwinfo-lua liblua libubus-lua libuci-lua lua\
 luci luci-app-firewall luci-lib-ip luci-lib-nixio\
 luci-mod-admin-full luci-proto-ipv6 luci-proto-ppp rpcd\
 uhttpd uhttpd-mod-ubus -wpad-mini wpad iperf ipset kmod-tun\
 nano openssh-client openssh-sftp-client openssl-util zlib\
 iptables-mod-filter iptables-mod-nat-extra ppp-mod-pppoe\
 xl2tpd ppp-mod-pppol2tp ntpd privoxy\
 kmod-crypto-authenc kmod-crypto-cbc kmod-crypto-crc32c\
 kmod-crypto-deflate kmod-crypto-des kmod-crypto-hash\
 kmod-crypto-hmac kmod-crypto-iv kmod-crypto-manager\
 kmod-crypto-md5 kmod-crypto-pcompress kmod-crypto-rng\
 kmod-crypto-sha1 kmod-crypto-sha256 kmod-crypto-user\
 kmod-crypto-wq kmod-crypto-crc32c kmod-sched-core kmod-sched-connmark\
 kmod-iptunnel kmod-iptunnel4 kmod-iptunnel6 iptables-mod-filter\
 kmod-ipt-ipsec kmod-ipsec kmod-ipsec4 kmod-ipsec6\
 kmod-udptunnel4 kmod-udptunnel6 kmod-lib80211\
 iptables-mod-ipsec -kmod-usb2 -kmod-usb-ohci\
 ddns-scripts luci-app-ddns luci-app-privoxy\
 luasocket lua-sha2 lua-bencode uboot-envtools"

この例ではL2TPをデフォルトで使えるようにし、strongSwanはパッケージをあとからインストールできるようにモジュール入れました。strongSwanのメタパッケージをインストールすると、ipパッケージも自動的にインストールするがあとでip-fullに入れ替えます。privoxyもデフォルトで入れておき、あやしいwifiスポットに対して間接的に接続できるようにしました。注意することはログが相当溜まるのでLuciの設定でデフォルトから最小限のログ出力にしたほうが良いでしょう。さもないとログがいっぱいになりシステムが止まります。sshクライアントはRSA鍵でログインできるようにdropbearのsshから変更しました。wpadはwpaエンタープライズ用でも使えるようにフル装備のパッケージに入れ替えました。

これだけの機能を入れても残りはだいたい900KBちょっと残っているので、まだまだ余裕があります。

Image 2:

必要最小限の構成で作ってみました。

#!/bin/sh

#make image PROFILE=Default PACKAGES=\
make image PACKAGES=\
"libiwinfo libiwinfo-lua liblua libubus-lua libuci-lua lua\
 luci luci-app-firewall luci-lib-ip luci-lib-nixio\
 luci-mod-admin-full luci-proto-ipv6 luci-proto-ppp rpcd\
 uhttpd uhttpd-mod-ubus -wpad-mini wpad ipset kmod-tun\
 nano openssh-client openssh-sftp-client openssl-util zlib\
 iptables-mod-filter iptables-mod-nat-extra ppp-mod-pppoe\
 kmod-sched-core kmod-sched-connmark\
 iptables-mod-filter\
 kmod-lib80211\
 -kmod-usb2 -kmod-usb-ohci\
 luasocket lua-sha2 lua-bencode uboot-envtools\
 -ip ip-full"

# UPDATE: OpenWRT 18.06.1

make image PROFILE=wmr-300 PACKAGES=\
"libiwinfo libiwinfo-lua liblua libubus-lua libuci-lua lua\
luci luci-app-firewall luci-lib-ip luci-lib-nixio\
luci-mod-admin-full luci-proto-ipv6 luci-proto-ppp rpcd\
uhttpd uhttpd-mod-ubus -wpad-mini wpad-wolfssl ipset kmod-tun\
nano zlib\
iptables-mod-filter iptables-mod-nat-extra \
kmod-sched-core kmod-sched-connmark\
iptables-mod-filter\
kmod-lib80211\
-kmod-usb2 -kmod-usb-ohci\
luasocket lua-sha2 lua-bencode"

 

 

References:

Buffalo WMR-300 [OpenWrt Wiki]