WSL 사용시 네트워크 관련 팁 - 4
페이지 정보
본문
지난 번 글들의 링크입니다.
이번에는 원래 지난 번 글에 쓰려고 했던, 부팅시마다 WSL용 Virtual Switch Type을 External로 지정하는 방법을 설명해 보려 합니다.
뭐, 다들 예상하시겠지만, 부팅시마다 스크립트로 실행하는 것이 제가 아직까지 사용하고 있는 방법입니다.
다른 좋은 방법이 있을 수 있으나, 제 (구글링) 능력 부족으로 이 방법 외의 적당한 것을 찾지는 못했습니다. 바로 시작해 보겠습니다.
전의 글에서 보았듯이 External Type으로 지정해 주려면 할당할 실제 네트워크 장치가 필요합니다.
마우스로 클릭하는 것이 아니므로, 실제 인터페이스 이름을 정확히 알아야 합니다.
명령창에서 ncpa.cpl을 치면 구 인터페이스 스타일의 Network Connections 창이 뜨면서 현재 Windows에 등록된 장치들이 나오게 됩니다.
보통 Ethernet 장치는 Ethernet, Ethernet 2, ... 등으로 보입니다.
장치가 여러개인 경우는 명령창에서 다음의 명령으로 볼 수도 있습니다.
'Interface Name'을 참조하세요.netsh interface show interface
- (PowerShell에서)
Get-NetAdapter
- 만약 Name이 길어서 짤리는 경우(... 으로 표시),
로 보셔도 됩니다. 'Name'을 참조하세요.Get-NetAdapter | Format-List
- 만약 Name이 길어서 짤리는 경우(... 으로 표시),
제 경우는 일단 'Ethernet' 입니다.
WSL을 위한 Virtual Switch Name도 필요합니다. 보통 Windows 10의 경우 WSL, Windows 11의 경우 'WSL (Hyper-V firewall)'입니다만, 정확히 확인하기 위해 관리자 권한으로 PowerShell에서
Get-VMSwitch
명령으로 확인하시면 됩니다. (관리자 권한이 아닌 경우 에러납니다.)
이제 모두 확인이 되었으므로 PowerShell script를 만들어 봅시다. 에디터로 적당한 이름의 파일을 만듭니다. 확장자는 .ps1으로 합니다.
(예: change_WSL_switch_type.ps1)
# Get current WSL switch type
$wsl_vmswitch = Get-VMSwitch -Name "WSL (Hyper-V firewall)"
if ($wsl_vmswitch.SwitchType -eq "External" )
{
echo "Current WSL VM Switch is external."
exit 0
}
else
{
echo "Current WSL VM Switch is $($wsl_vmswitch.SwitchType). Need to change it..."
}
$wsl_adapter = Get-NetAdapterBinding -Name "Ethernet" | Where ComponentID -eq 'vms_pp'
if ( $wsl_adapter.Enabled -eq $True )
{
echo "Unbind Hyper-V Extensible Virtual Switch then wait for 5 seconds ..."
Set-NetAdapterBinding -Name "Ethernet" -ComponentID vms_pp -Enabled $False
Start-Sleep -Seconds 5
}
echo "Change WSL VM Switch type to External, bind with 'Ethernet'..."
Set-VMSwitch "WSL (Hyper-V firewall)" -NetAdapterName "Ethernet"
echo "Disable Management by OS property..."
Set-VMSwitch "WSL (Hyper-V firewall)" -AllowManagementOS $False
이렇게 저장한 스크립트를 '관리자 권한'으로 실행시켜 주면 됩니다.
그렇게 하기 위해서 여러 가지 방법이 있지만, 저는 귀찮아서 걍 배치파일을 만들었습니다.
아래와 같이 만들어주고 실행시키면 그냥 실행시켜도 관리자 권한으로 다시 실행시킵니다. (물론 권한 상승 프롬프트가 뜹니다.)
@echo off
REM Check current user privileges
net file 1>NUL 2>NUL
if not '%errorlevel%' == '0' (
powershell Start-Process -FilePath "%0" -ArgumentList "%cd%" -verb runas >NUL 2>&1
exit /b
)
cd /d %1
powershell -ExecutionPolicy RemoteSigned -File C:\MyDirectory\change_WSL_switch_type.ps1
이렇게 change_WSL_switch_type.cmd 라고 파일을 만들어서 PowerShell 스크립트와 같은 디렉토리에 넣어줍니다.
위에서 "MyDirectory" 라고 된 부분을 실제 디렉토리(폴더) 이름으로 바꿔주시면됩니다.
권한 상승 프롬프트가 뜨는 것도 귀찮다...하시는 분은 Task Scheduler를 사용하는 방법이 있습니다.
귀차니즘으로 구글링 해 보시는 것을 추천드립니다.
오늘은 여기서 마치고 다음에는 네트워크 카드를 추가하기 힘든 상황에서 '임시'로 사용하는 방법을 설명하려고 합니다.
다만, 제가 지금까지 확인한 바로는 Windows 10에서만 동작하고, Windows 11에서 문제가 있어서 사용할 수 없었습니다.