🌊

Cisco Annyconnect VPNでWSLから外部へアクセスできない問題を解決する方法

2023/05/15に公開

理由はさっぱりわからない

セキュリティ意識の高い会社で仕事をするとき、
貸与されたPCと会社のネットワークはVPNで接続することになると思うが、
Cisco Annyconnect というCiscoのツールでVPN接続すると、
WSLから外部のドメインにアクセスできなくなった。

通常
curl google.com 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
VPN接続中
curl google.com                                                                     

( ゚Д゚) ヘンジガナイ

ただの屍のようだ。

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪

------------------- ↓ 本題はここから ↓-------------------

正直、理由は説明されてもさっぱりわからなかった。
ただ、動かす方法だけはわかったので記載だけしておく。

VPN接続

Cisco AnyConnect よりVPN接続をする

VPNネットワークインタフェースの優先度を下げる

VPNが使用しているネットワークインタフェースの優先度を下げる
InterfaceMetric という値を 6000 に設定。
Powershellのアイコンを右クリックして管理者権限で実行する
(コマンド内部でgsudoを使うと事故るので注意)

powershell
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000

DNSアドレスをresolv.confに記述

DNSアドレスを /etc/resolv.conf に転記する。
WSLインスタンス名を Ubuntu-22.04 とすると

powershell
Get-DnsClientServerAddress -AddressFamily ipv4 | Select-Object -ExpandProperty ServerAddresses | % { "nameserver " + $_ } | wsl -d Ubuntu-22.04 --user root -- tee /etc/resolv.conf

https://github.com/microsoft/WSL/issues/4277#issuecomment-745622486

https://qiita.com/hisato_imanishi/items/0358e093cc6714b571dc

------------------- ↓ 後書きはここから ↓-------------------

以下のようなコマンドがあるが、
WSLからPowershellが起動できるかは微妙なのであまり使えない。

https://gist.github.com/nfekete/7a277bf9e25e89e1c8bfb8b64dcc08ed

また、wsl.confをいじってresolv.confを固定化するのを薦めているのをよく見かけるが、
私的にはお勧めできない。
もし記述にミスがあったら復帰が不可能になる。

Discussion