Windows10からIX2215へのL2TP/IPsec VPN接続に失敗するときにやったこと

はじめに

NECVPNルータであるUNIVERGE IXシリーズにL2TP/IPsec機能を設定した際、MaciPhoneからは接続できるのにWindows10からは接続できなかった(「セキュリティ層でリモートコンピュータと互換性のあるパラメーターをネゴシエートできなかったため、L2TP接続に失敗しました」というエラー)。IX2215だけではなくIX2105とかでも同じだと思う。

適当に調べるとレジストリを変更してNAT越えに対応する記事が非常に多かったが、それでは解決しなかった。

そこでWindows10上でパケットキャプチャを行いVPN接続ができない原因を調査した。

結論

IXのリファレンス通りにやるとIPsecの鍵交換時に必要なプロポーザルが足りないようだった。 AES 256bit, SHA-1 2048bit(DH group 14)をIX側で使用するように設定すると通った。 config的には

Router(config)# ike proposal ike4 encryption aes-256 hash sha group 2048-bit

を打ち込めば接続できた。

環境

  • IX2215: IX Series IX2215 (magellan-sec) Software, Version 9.4.17
  • Windows10 Pro 1803(ビルド 17134.345)

原因の調査

Wiresharkのフィルタに udp.port == 4500 or udp.port == 500 を入れるといい感じに鍵交換のパケットだけが見られる。

まず最初のパケット(クライアント→VPNサーバ)を見てみる。 その中でも1枚めの画像の赤線の部分の中にプロポーザルが格納されている。 f:id:jackson58:20181111201433p:plain Security Associationの中身。 f:id:jackson58:20181111201553p:plain

Proposal transforms にはプロポーザルの数が格納されており、その後に具体的な内容が格納されている(Payload: Transform (3) #1, #2, #3...)。

私の環境では以下のプロポーザルが格納されていた。

  • AES-CBC 256-bit, SHA ECP 384-bit
  • AES-CBC 128-bit, SHA ECP 256-bit
  • AES-CBC 256-bit, SHA DH Group 14(2048-bit)
  • 3DES-CBC, SHA DH Group 14(2048-bit)
  • 3DES-CBC, SHA DH Group 2(1024-bit)

IXのリファレンスでは以下のようになっていた。

  • AES-CBC 256-bit, SHA DH Group 2(1024-bit)
  • AES-CBC 128-bit, SHA DH Group 2(1024-bit)
  • 3DES-CBC, SHA DH Group 2(1024-bit)

今回の環境下でのIXではハッシュアルゴリズムとしてSHAのECPが設定できないようなので、IX側にAES-CBC 256-bit, SHA DH Group 14(2048-bit)が使えるように設定をすればいいようだった。

また、Windows10側でのVPN接続は以下のように設定した。 f:id:jackson58:20181111202944p:plain

「データの暗号化」の部分で 暗号化が必要(サーバが拒否する場合は切断します)にしたところ、「ローカル コンピュータでは、要求されたデータの暗号化の種類はサポートされません。」というエラーが発生した。

余談

意外なところにIPsecの細かなパラメータ設定するところがあったのが発見でした。

既存のDHCPサーバが存在する場合でもPXE Bootをする(dnsmasqを使ったProxy DHCPの設定)

はじめに

PXE BootをするためにはDHCPサーバにブート情報を設定する必要があるが,Buffalo等の家庭用ルータが設置してあるとこれができない.だからといって別途サブネットを分けたりするのも面倒.

そこで,Proxy DHCPという仕組みを使うと,既存のDHCPサーバの設定を変更せずにブート情報を流すことができる. (参考:PXEには3種類ある

今回はdnsmasqを使ってProxy DHCPの設定を行う.

環境

  • サブネット:192.168.11.0/24
  • Proxyサーバ(dnsmasq):192.168.11.100
  • TFTPサーバ:192.168.11.201
  • (既存のBuffaloルータ:192.168.11.1)

ブートの流れ

  1. PXE ClientがDHCP要求を行う
  2. 既存のDHCPサーバ(Buffaloルータ)が応答する(DHCP Offer)
  3. Proxyサーバ(dnsmasq)がnext-serverとbootfile-nameを載せて応答する(DHCP Offer)
  4. PXE Clientが既存DHCPサーバに対してDHCP Requestを行う
  5. 既存DHCPサーバがDHCP Ackを返す
  6. PXE ClientがProxyサーバに対してDHCP Requestを行う
    • ClientとProxy間はポート4011/UDPが使用される
  7. Proxyサーバがnext-serverとbootfile-nameを載せてACKを返す
  8. PXE ClientがTFTPサーバへアクセスする

dnsmasqの設定

(参考:PXE Server on Existing Network (DHCP Proxy) with Ubuntu | manski's blog

ここではTFTPサーバの設定方法は割愛する.

  • /etc/dnsmasq.conf に以下を追記
port=0
log-dhcp
dhcp-range=192.168.11.0,proxy
dhcp-boot=pxelinux.0,192.168.11.201
pxe-service=x86PC,"Network Boot",pxelinux,192.168.11.201

ここでpxe-service オプションにTFTPサーバのIPアドレスを書かないと,next-serverにProxyサーバIPアドレスが設定されてしまうので注意. dhcp-bootにしか書かないと”ブートの流れ”の3と7でnext-serverのIPアドレスが変わり,PXEブートに失敗する. (参考:[Dnsmasq-discuss] dnsmasq dhcpProxy and PXE next-server not working

あとはdnsmasqを再起動すれば設定完了.

パケットキャプチャしてみた

PXEブート時のDHCPパケットをキャプチャするとこのようになった.

f:id:jackson58:20180531185459p:plain

192.168.11.26PXE Clientに割り当てられたIPアドレス

4011/UDPの通信はプロトコルBOOTP/DHCPに変えてあげることでパースしてくれる. f:id:jackson58:20180531185858p:plain

VyOSでPXEサーバの設定をする

VyOS 1.1.8でのPXEサーバの設定方法をメモ.

設定前のDHCP Serverのコンフィグ

ネットワーク名は win-ad としている.

vyos@vyos# show service dhcp-server shared-network-name win-ad  
 subnet 10.76.5.0/24 {                                          
     default-router 10.76.5.254                                 
     dns-server 10.76.5.1                                       
     domain-name 765pro.local                                   
     start 10.76.5.2 {                                          
         stop 10.76.5.50                                        
     }                                                          
 }                                                              

必要なコンフィグ

  • bootfile-server
    • next-server を指定する
  • bootfile-name
    • ブートストラップファイルの名前を指定
vyos@vyos# set service dhcp-server shared-network-name win-ad subnet 10.76.5.0/24 bootfile-server 192.168.11.201
vyos@vyos# set service dhcp-server shared-network-name win-ad subnet 10.76.5.0/24 bootfile-name pxelinux.0

おわり

最初は shared-network-parametersfilename "pxelinux.0"を指定してあげればいいのかなと思ったけど,ダブルクオートが入ってるというのでエラーが起きて妙に悩んでしまった. 結構簡単にできるじゃん.

Powershell でWindowsのサービスを強制的に再起動する

ときどきWi-Fiが使えなくなるときがあり(電波アイコンに赤いバツがつく),wlansvc サービスを再起動しようにもSTOP_PENDING状態で固まることがあった. なのでwlansvcを強制的に再起動するためのPowershellスクリプトを書いてみた.

あくまで応急処置であり,根本的解決策ではない.wlansvcが突然固まる原因は一体…(´・ω・`)

再起動したいサービス名を調べる

Get-Service を引数なしで実行することでサービス一覧が表示される.後のコマンドではNameカラムに表示されるサービス名を使用する.

PS C:\WINDOWS\system32> Get-Service

Status   Name               DisplayName
------   ----               -----------
Running  AdobeARMservice    Adobe Acrobat Update Service
Running  AESMService        Intel® SGX AESM
Running  AGSService         Adobe Genuine Software Integrity Se...
Stopped  AJRouter           AllJoyn Router Service
Stopped  ALG                Application Layer Gateway Service
Stopped  AppIDSvc           Application Identity
Running  Appinfo            Application Information
Running  Apple Mobile De... Apple Mobile Device Service
Stopped  AppMgmt            Application Management
Stopped  AppReadiness       App Readiness
Stopped  AppVClient         Microsoft App-V Client
Running  AppXSvc            AppX Deployment Service (AppXSVC)
Stopped  AssignedAccessM... AssignedAccessManager サービス
Running  AudioEndpointBu... Windows Audio Endpoint Builder
Running  Audiosrv           Windows Audio
// snip //

PIDを調べる

Get-WmiObject コマンドを使ってWMIから調べる.Filter引数はSQLのWhere句のように書ける. %ワイルドカード

PS C:\WINDOWS\system32> Get-WmiObject -Class Win32_Service -Filter "Name LIKE 'wlan%'"


ExitCode  : 0
Name      : WlanSvc
ProcessId : 13564
StartMode : Auto
State     : Running
Status    : OK

PIDを抽出する

上記のようにサービスの詳細が出力できたら,あとは文字列加工をするのみ. Linuxでいうgrepコマンドにあたる findstr コマンドでProcessId 行のみを取り出し,cutコマンドの代わりに ForEach-Object コマンド(省略形: %)と split演算子を組み合わせてPIDを抽出する.

PS C:\WINDOWS\system32> Get-WmiObject -class win32_service -filter "name='wlansvc'" | findstr ProcessId | % {$($_.split(":"))[1]}
 13564

サービスを強制停止&起動

taskkill.exe /F /PID $WLANSVC_PID
Start-Service -Name wlansvc

スクリプト

gist.github.com

参考

僕の私のまあやお姉さん

この記事はまあやお姉さん Advent Calendar 2016 - Adventar16日目の記事です。

前回の記事は逆に今。まあやお姉さん。15でした。

さて,今回は番外編です.ゆーき大先生(id:yu_ki_kun_0)のレビュー記事を楽しみにしているみなさまには大変申し訳なく思います.

何を書こうか

この記事では,番外編として適当にまあやお姉さんの思い出を綴っていこうと思います.

続きを読む

ああ、なんくるねぇな

これは声優 Advent Calendar 2016 3日目の記事です。 昨日はyu_ki_kun_1さんの逆に今。まあやお姉さん。2 でした。

今回は沼倉愛美さんについて書こうと思います。 持っている感情を言葉にするのが難しいので、好きになったきっかけを淡々と思い出していきます。

はじめて知った日

なにも知らない私が声優さんに興味を持ち始めた2年前、まんがタイムきららフェスタ2014というイベントに参加したのがはじまりです。

元々は早見沙織さん目当てで恐る恐る参加したんですが、早見さん以外の声優を知らない自分にとって「声優さんっていいな…!」と思わされたイベントでした。

開演、そしてキャストの登場。いろんな声優さんが並ぶ中で「お…?頭にひまわりの髪飾り、赤いメガネ…とても綺麗な方がいる…」

その方が、沼倉愛美さんでした。

好きになったきっかけ

きらフェスのときはただその存在を知った程度でした。 ぬーさんについて本格的に興味を持ったのは今年の7月頃。 大学4年になり研究室に配属され、アイマスPである先輩からの執拗な洗脳布教活動によりアイマスに触れるようになりました。

ゲームやって、アニメを見て、ライブを見て…

あるときティンと来た瞬間がありました。 YouTubeに上がっていたアイマス10th BDの販促映像。ダイジェストなのになぜ30分もあるのか…と思いつつ眺めてると、序盤で水鉄砲を撃ちまくるぬーさんの姿が。

曲は楽しいし、会場も楽しそうだし、改めて意識した瞬間でした。

ニコ動とかで動画を漁ってると、765メンバーの末っ子キャラであったり不憫な扱いを受ける(そしてそれを悲しげに口にする)ぬーさんを見て、どこかギャップにやられたような気がします。

それ以来、ぬーさんが出演されてるアニメを少しづつ追いかけているところです。

好きなところ

アイマスの中でぬーさんが演じる我那覇響というキャラクターは、ポジティブで自信家で、その自信家ぶりから油断してドジをやらかすことがある面白いキャラクターです。 この長所と短所を表現するぬーさんの演技が個人的にツボです。 さっと例を挙げると「ふふーん♪」と「うぎゃー!!」とか。

また別作品では、"だがしかし"のサヤ師。 印象に残ってるのは、幼なじみであり小さい頃から恋心を抱くココノツとお祭りで一緒に歩くシーン。 単純に縁日を楽しむところもそうですが、やっぱり恥ずかしそうに照れながらココノツに話しかけるところが個人的にツボです。 あとこれ (http://www.nicovideo.jp/watch/sm28354656) がすき。

"蒼き鋼のアルペジオ"のタカオ。そしてTrident. もっと早く出会いたかった。 気高い雰囲気のキャラでありながら、ネタシーンでは気持ちのいいツッコミを入れるところが良いですね。アニメ10話は大号泣でした。

"魔法少女育成計画"のリップル。 ぬーさん曰く、リップルは9話からが本番だそうです。生きてくれ。

アニメ以外でも、ラジオや動画配信で見る・聴く姿はそれはまた素晴らしく、竹達彩奈さんとやっている初ラジでは「なんでこんな無防備な感じなんだ…」と思ってしまうような自由っぷりが楽しめます。

いろいろありすぎて書ききれない…のでここまで。

アーティスト活動

ぬーさんは11月にアーティストデビューされましたね。

1stシングル「叫べ」には3曲入っているんですが、すべて違った表情の歌なのです。 「叫べ」は感情をぶつけるような曲。「言の葉」は穏やか。「HEY!」ははしゃぐ曲。

特に「HEY!」に関しては、途中で「ふふっ」って囁き声が聞こえるんですけど、私はそこで息が絶えました。

東京で行われた握手会に行ってきたのですが、ふわっとした柔らかい手に感激したあまり、何も言えなくなってしまったのは良い思い出です。 横浜で行われたファンミーティングでのお渡し会ではちゃんとお話できてよかった…。

"とある撮影"と言われていた2ndシングル「Climber's High!」のMV撮影では、アー写と同じ姿のロックンローラー沼倉がライブハウスで大暴れしてました。 最後のテイクが始まってイントロが流れて、気合いが入りすぎた結果マイクを落とし恥ずかし笑いをするロックンローラー。これがすごい印象的でした。 CDもMVも楽しみです。

まとめ

好きという感情を言葉にして表すのはとても難しく、一言で魅力をまとめると

「良いんだよ…」

になってしまう私を許してください。

(すごいだらだらと書いていたら12/3を過ぎていました。ごめんなさい。)

"GDK_BACKEND does not match available displays"が出てX転送に失敗したときの確認事項

症状

タイトルの通り、SSH先でX転送しようとして GDK_BACKEND does not match available displaysとエラーが出た。 $DISPLAYという環境変数も空の状態。

[user@remote ~]$ firefox
Error: GDK_BACKEND does not match available displays
[user@remote ~]$ echo $DISPLAY

[user@remote ~]$ 

環境

  • リモート側OS: Arch Linux
  • OpenSSHのバージョン:openssh 7.3p1-1
  • ローカル側OS: Windows10
  • 使用クライアント: MobaXterm v9.1

sshd_configの設定確認

/etc/ssh/sshd_configに以下のオプションを追記する。

X11Forwarding yes

sshdを忘れずに再起動する。

[user@remote ~]$ sudo systemctl restart sshd

再ログイン

一度ログアウトし、再度SSHログインする。 $DISPLAY変数に情報が格納されるようになった。

[user@remote ~]$ echo $DISPLAY
localhost:10.0

これにて解決。