Home Lab 구축기 (3): Windows 설정

최규민

최규민

2025년 6월 12일3 min read

Home Lab 구축기 (3): Windows 설정

지난 포스트에서는 WSL 설치 및 SSH서버 패키지 설치를 다루었습니다.

우리가 카페에서 집에 있는 딥러닝 서버(데스크탑)에 접속하려면 지난 포스트에서 설정한 포트를 통해야 하는데요,

Windows에서는 방화벽을 통해 이 접근을 차단하고 있습니다.

따라서

  1. Windows의 방화벽 설정을 통해, 딥러닝 서버(데스크탑)에 지정된 포트로의 접근을 허용하는 인바운드 규칙을 추가해야 합니다.

또한, 기본적으로 WSL의 IP 주소는 동적이라서,

  1. 포트를 통한 외부 접근이 우리의 데스크탑에 도달할 수 있도록 WSL IP를 동적 추출해야 합니다.

이를 위해서, (1)과 (2)를 가능케 하는 PowerShell 스크립트를 작성하고, 이 .ps1 코드파일이 딥러닝 서버(데스크탑)가 켜질 때마다 자동으로 실행되게 하는 작업이 필요합니다.


🪟Windows 설정

방화벽 설정

인터넷 블로그들을 통해 여러 쉘 스크립트를 찾을 수 있었습니다.

이들 중 필요한 것만 골라내고, 예외 처리 등 안정성을 강화하여 아래와 같은 코드를 완성할 수 있었습니다.

bash
# 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

여기서

bash
# 4. 포트 설정
$ports = @({포트번호입력})

에는 본인의 포트 번호를 입력하면 됩니다. 가령, $ports = @(22)

위 스크립트를 wsl2_port_forward.ps1로 저장 후,

초기 설정을 위해 저장한 디렉토리에서 Powershell을 관리자 권한으로 열고 아래 커맨드를 입력합니다.

파일 명은 마음대로 정하셔도 좋지만, 이 포스트에서는 wsl2_port_forward.ps1로 진행하겠습니다.
bash
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를 이용해 접속하는 방법을 알아보겠습니다🤗


#🌐Infra#🌳Environments

Series · Home Lab 구축기

3 / 5
최규민

최규민

AI Engineer

사파식 AI-Native LLM SWE