Home Lab 구축기 (3): Windows 설정
최규민
2025년 6월 12일3 min read
지난 포스트에서는 WSL 설치 및 SSH서버 패키지 설치를 다루었습니다.
우리가 카페에서 집에 있는 딥러닝 서버(데스크탑)에 접속하려면 지난 포스트에서 설정한 포트를 통해야 하는데요,
Windows에서는 방화벽을 통해 이 접근을 차단하고 있습니다.
따라서
- Windows의 방화벽 설정을 통해, 딥러닝 서버(데스크탑)에 지정된 포트로의 접근을 허용하는 인바운드 규칙을 추가해야 합니다.
또한, 기본적으로 WSL의 IP 주소는 동적이라서,
- 포트를 통한 외부 접근이 우리의 데스크탑에 도달할 수 있도록 WSL IP를 동적 추출해야 합니다.
이를 위해서, (1)과 (2)를 가능케 하는 PowerShell 스크립트를 작성하고, 이 .ps1 코드파일이 딥러닝 서버(데스크탑)가 켜질 때마다 자동으로 실행되게 하는 작업이 필요합니다.
🪟Windows 설정
방화벽 설정
인터넷 블로그들을 통해 여러 쉘 스크립트를 찾을 수 있었습니다.
- https://21june.tistory.com/3
- https://blog.naver.com/PostView.naver?blogId=islove8587&logNo=223430875037
- https://sean-j.tistory.com/entry/WSL-윈도우-부팅-시-자동-실행하기
이들 중 필요한 것만 골라내고, 예외 처리 등 안정성을 강화하여 아래와 같은 코드를 완성할 수 있었습니다.
# 1. 관리자 권한 자동 상향
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Start-Process powershell "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
Exit
}
# 2. WSL SSH 서비스 시작 및 대기
wsl -d Ubuntu -u root service ssh start | Out-Null
Start-Sleep -Seconds 3 # WSL 초기화 대기
# 3. WSL2 IP 동적 추출
$wsl_ip = (wsl hostname -I).Split()[0].Trim()
if (-not $wsl_ip) {
Write-Error "WSL2 IP 추출 실패 - WSL 인스턴스가 실행 중인지 확인하세요."
exit 1
}
Write-Host "📍 WSL2 IP: $wsl_ip"
# 4. 포트 설정
$ports = @({포트번호입력})
# 5. 방화벽 규칙 처리
foreach ($port in $ports) {
$rule_name = "WSL2_Port_${port}"
# 기존 규칙 제거
if (Get-NetFirewallRule -DisplayName $rule_name -ErrorAction SilentlyContinue) {
Remove-NetFirewallRule -DisplayName $rule_name -Confirm:$false
Write-Host "🔴 기존 방화벽 규칙 제거: $rule_name"
}
# 새 규칙 추가
New-NetFirewallRule `
-DisplayName $rule_name `
-Direction Inbound `
-LocalPort $port `
-Protocol TCP `
-Action Allow
Write-Host "🟢 새 방화벽 규칙 추가: $rule_name"
}
# 6. 포트포워딩 설정
netsh interface portproxy reset | Out-Null
Write-Host "🧹 모든 포트포워딩 초기화"
foreach ($port in $ports) {
netsh interface portproxy add v4tov4 `
listenport=$port `
listenaddress=0.0.0.0 `
connectport=$port `
connectaddress=$wsl_ip
Write-Host "🔵 포트포워딩 설정: $port → $wsl_ip"
}
# 7. SSH 서비스 상태 확인
$ssh_status = wsl -d Ubuntu -u root service ssh status
Write-Host $ssh_status
# 8. 결과 검증
netsh interface portproxy show v4tov4
Get-NetFirewallRule -DisplayName "WSL2_Port_*" | Format-Table DisplayName, Enabled, Direction, Action
# 9. WSL 지속 실행
wsl -d Ubuntu --cd ~ | Out-Null
여기서
# 4. 포트 설정
$ports = @({포트번호입력})에는 본인의 포트 번호를 입력하면 됩니다. 가령, $ports = @(22)
위 스크립트를 wsl2_port_forward.ps1로 저장 후,
초기 설정을 위해 저장한 디렉토리에서 Powershell을 관리자 권한으로 열고 아래 커맨드를 입력합니다.
파일 명은 마음대로 정하셔도 좋지만, 이 포스트에서는 wsl2_port_forward.ps1로 진행하겠습니다.Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
.\wsl_port_forward.ps1경고문이 뜰 텐데 ‘모두 허용’으로 하면 됩니다.
cd 커맨드를 이용해 이동하면 됩니다.작업 스케쥴러 설정
이 스크립트는 부팅 시 WSL IP가 바뀌는 것을 잡아내는 역할을 하므로, 부팅 할 때마다 동작해야 합니다.
따라서 작업 스케쥴러에서 이 코드가 부팅 후 30초 뒤(안정성 확보)에 실행되도록 설정해줍니다.

작업 추가를 누르고, 일반탭에서 다음과 같이 설정합니다.
이 때 윈도우 비밀번호를 타이핑 해야합니다.
이렇게 하는 이유는 당연하지만 원격 접속 시 윈도우 로그인을 못하기 때문입니다.

트리거 편집에서는 다음과 같이 설정합니다.
이렇게 하는 이유는 당연하지만 원격 접속 시 윈도우 로그인을 못하기 때문입니다.

- 프로그램은 Powershell이므로 Powershell 경로를 입력합니다.
대부분
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe입니다. - 인수 추가는 다음과 같습니다.
-NoProfile -ExecutionPolicy Bypass -File "{방금 만든 ps1 파일 경로}”
이렇게 설정하면 매번 딥러닝 서버(데스크탑)이 켜질 때마다, 자동으로 Windows 시스템이 SSH 접속을 위한 준비를 하게 됩니다.
다음 포스트에서는 이렇게 만들어진 WSL2 SSH 딥러닝 서버에 VSCode를 이용해 접속하는 방법을 알아보겠습니다🤗
Series · Home Lab 구축기
3 / 5편