eLabFTW, 최고의 무료 전자연구노트 셋업 -네트워크 설정-

eLabFTW, 최고의 무료 전자연구노트 셋업 -네트워크 설정-

WSL2 내부 IP와 Windows 호스트 IP를 연결하고, Windows 포트 프록시, 방화벽 예외, 라우터 포트 포워딩, DDNS 설정까지 전 과정을 자세히 설명한다.
eLabFTW 네트워크 설정 흐름도 (예시)

이번 편에서는 어렵게 설치한 eLabFTW를 외부에 성공적으로 노출하는 방법에 대해서 다뤄보려고 한다. 이를 위해서는 네트워크에 대한 기본적인 이해가 필요하다. 이번 포스트를 통해서 우리는 IP포트, Docker, DDNS 등에 대한 네트워크 기본 개념을 이해하게 될 것이다.

지난 포스트에서는 Windows 운영체제에서 WSL2와 Dockerelabftw 를 성공적으로 설치하고 구동했다. 이제 내 PC(Windows) IP 를 이용해서 외부(인터넷 혹은 내부망 네트워크)에서도 접근할 수 있게 해야 진정한 설치가 끝나게 된다.

1️⃣ WSL2 IP 이해와 고정하기

WSL2는 지난번에도 언급했다시피 가상환경을 만들어내는 기능이다. 이것은 가상 NAT 네트워크에 연결돼 있어 또 다시 고유의 IP를 따로 할당 받는다. IP란 컴퓨터가 인터넷에 접속할 때 가지는 고유의 번호이다. 인터넷 회선을 연결하면 보통 이런 IP를 1개 지정 받는다.

엇, 그런데 어떻게 각 가정마다 여러 전자기기로 인터넷에 접속하는거지?

그건 바로 라우터의 내부IP 할당 기능 때문이다. 흔히 공유기라고 알고 있는 이 라우터는 자체적으로 외부 IP 1개(예시: 172.19.113.217)에서부터 내부망 IP를 만들어낸다. 보통 이런 가상 IP는 번호 범위가 지정되어있어서 iptime 공유기를 사용하고 있다면 192.168.0.1~255 번호를 쓰고 있을 것이다.

이런 공유기의 기능과 동일하게 WSL2의 가상 NAT 네트워크도 가상의 번호를 쓰고 있다. eLabFTW는 Docker라는 가상 환경을 통해 설치 되었으나 그 가상 환경 밖에는 또 다시 WSL2라는 가상 환경이 있는 셈이다. 따라서 elabftw 컨테이너는 WSL2 내부 IP(예: 172.19.113.217)에 바인딩돼 있기 때문에, 이 주소가 변하면 Windows에서 netsh portproxy도 다시 설정해줘야 한다. 예를 들어 외부에서 172.19.113.217 IP에 접속하려고 한다면 내 컴퓨터에서 이것을 인식하고 내부 IP로 해당 정보를 전달해야한다.

이것을 도식화하면 아래와 같은 모습이 된다.

네트워크 흐름도
┌─────────────────┐
│ 외부 사용자 (인터넷)             │
│ 요청: https://mylab.ddns.org     │
└─────────────────┘
              │
              ▼
      [DNS 조회 (DDNS)]
       mylab.ddns.org
              │
              │ (해당 도메인이랑 연결된 공인 IP 반환)
              ▼
      공인 IP (예: 203.0.113.45)
              │
              ▼
┌─────────────────────────────────┐
│ 라우터 (공유기, 공인 IP 보유 (이게 통신사에서 받은 IP인 것이다.))│
│ 공유기에서의 포트 포워딩 설정:                                   │
│   외부 포트 443 → 내부 IP 예) 192.168.0.2, 포트 443             │
└─────────────────────────────────┘
              │ (트래픽을 Windows PC로 전달)
              ▼
┌───────────────────────────────┐
│ Windows PC (내부 IP: 192.168.0.2)                            │
│ netsh portproxy 설정:                                        │
│   443 포트 수신 → WSL2의 172.19.113.217:443로 전달          │
│ 방화벽 설정에서 포트 443 허용이 필요할 수 있음.              │
└───────────────────────────────┘
              │ (WSL2 가상 네트워크로 전달)
              ▼
┌───────────────────────────────┐
│ WSL2 (가상 환경 IP: 172.19.113.217)                          │
│ Docker Engine이 동작 중                                      │
│ Docker는 172.19.113.217 요청 중 443 포트로 들어온 요청을     │
│  내부 컨테이너로 옮겨줌.                                     │
│ 0.0.0.0:443 → Docker컨테이너:443에 매핑                     │
└───────────────────────────────┘
              │ (Docker 네트워크 브릿지)
              ▼
┌────────────────┐
│ eLabFTW 컨테이너 (포트 443)    │
│ 응답/반응 완료!                │
└────────────────┘

전체적인 부분들을 다 확인해봤으니 이제는 아래 가이드를 잘 따라가기만 하면 된다.

1‑1. 현재 사용 중인 WSL2의 내부 IP 확인

우선은 WSL2 환경이 쓰고 있는 가상 IP 주소를 알아야 한다. 아래의 명령어를 WSL2 콘솔창에 입력하도록 하자. 그세 까먹었다면 윈도우 검색창에서 wsl을 입력하고 실행시키면 그게 바로 WSL2 콘솔이다.

# WSL2 (Ubuntu) 안에서
ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'

# 출력 예시
172.19.113.217

여기 나온 IP 주소를 잘 기억하도록 하자. 추후에 WSL2 보다 윗단계인 Windows OS에서 443 포트로 온 요청을 WSL2에게 넘길 때 해당 IP 주소를 사용하게 된다.

1‑2. 자동 IP 업데이트 스크립트를 이용한 WSL2 IP 고정 방식

애석하게도 WSL2에서 사용하는 내부 IP는 동적 IP에 해당되어서 컴퓨터가 재시작될 때마다 IP가 변경될 수 있는 확률이 존재한다. 이것이 바뀌면 앞서 설명했듯이 모든 네트워크 흐름이 끊기게 되기 때문에 이것을 방지하기 위해서 우리는 WSL2 IP고정하는 방법에 대해서 알아볼 것이다.

원리는 간단하다. Windows 내에서 자동으로 작동하는 스크립트를 작성할 것인데 이 스크립트는 다음과 같은 방식으로 작동한다.

  1. 현재 가상환경의 IP 주소를 알아냄
  2. 알아낸 주소를 netsh portproxy로 매번 갱신

본격적인 IP 주소 고정!

  1. C드라이브Scripts 폴더를 만들어주자.
  2. 해당 폴더에서 오른쪽 클릭으로 txt 파일 만들기를 진행하자.
  3. 파일 이름은 WSL2 IP 같은 것으로 변경한 뒤에 아래의 코드블럭 내용을 모조리 복사-붙여넣기 한다.
$ErrorActionPreference = 'Stop'

# 1) Windows 기본 게이트웨이를 사용하는 인터페이스의 IPv4 주소
$winIP = (Get-NetIPConfiguration | Where-Object { $_.IPv4DefaultGateway } | Select-Object -First 1).IPv4Address.IPAddress

# 2) 현재 WSL2 eth0 IPv4
$wslIP = (& wsl.exe -e sh -lc "ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'").Trim()

if ([string]::IsNullOrWhiteSpace($winIP) -or [string]::IsNullOrWhiteSpace($wslIP)) {
  Write-Error "IP 조회 실패. winIP='$winIP', wslIP='$wslIP'"
}

# 3) 기존 포트프록시 정리
& netsh interface portproxy delete v4tov4 listenport=443 listenaddress=0.0.0.0 | Out-Null
& netsh interface portproxy delete v4tov4 listenport=443 listenaddress=$winIP | Out-Null

# 4) 신규 등록 (모든 인터페이스 수신)
& netsh interface portproxy add v4tov4 listenport=443 listenaddress=0.0.0.0 connectport=443 connectaddress=$wslIP

# 5) 방화벽 규칙 보장
if (-not (Get-NetFirewallRule -DisplayName "eLabFTW HTTPS" -ErrorAction SilentlyContinue)) {
  New-NetFirewallRule -DisplayName "eLabFTW HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow | Out-Null
}

Write-Host "OK: WIN=$winIP → WSL=$wslIP"
  1. 이제 WSL2 IP.txt 이런 식으로 되어있는 파일의 확장자를 WSL2 IP.ps1으로 변경하도록 하자.

1-3. 작업 스케쥴러로 자동 실행 등록

작업 스케쥴러 관리자권한으로 실행
  1. 위 그림처럼 작업 스케쥴러를 관리자 권한으로 실행한다.
작업 스케쥴러에서 작업만들기 안내
  1. 작업 만들기 선택
  2. 일반 탭에서 가장 높은 수준의 권한으로 실행에 체크를 한다.
  3. 구성 대상Windows 10으로 설정하거나 그 이상의 항목으로 선택하면 된다.
  4. 이름WSL2 IP eLabFTW 같은 것으로 만들면 된다.
  5. 트리거 탭으로 넘어가서 새로 만들기 선택.
  6. 작업 시작로그온할 때로 설정하고 확인
  7. (선택사항) 다시 트리거 새로 만들기로 이번에는 작업 시작시작할 때를 또 추가한다.
  8. 동작 탭에서 새로 만들기를 선택.
  9. 프로그램/스크립트 란에 powershell.exe를 추가한다.
  10. 인수 추가(옵션) 란에 -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\WSL2 IP.ps1" 추가.
  11. 조건 탭과 설정 탭은 옵션을 확인하고 원하는대로 진행하면 된다.

여기까지가 첫번째 파트였다! 아마 생각보다 어렵지 않았으리라 믿는다. 이제는 다음 파트를 진행할 때다. IP 주소WindowsWSL2끼리 잘 연결했으니까 외부 인터넷에서 내 PC에 잘 도달할 수 있도록 공유기를 설정해줘야 한다.


2️⃣ 외부(인터넷)에서 접근하기 – 라우터(공유기) 포트 포워딩 + DDNS

2‑1. 라우터(공유기) 포트 포워딩

아마 대부분의 연구실에서는 사무공간을 구성할 때 공유기를 거칠 것이라고 생각한다. 대표적인 공유기는 역시, Iptime이다. 본 글은 iptime을 기준으로 작성하였다. 그러나 다른 공유기에서도 똑같이 적용할 수 있도록 잘 작성해볼테니 걱정하지말고 쫒아가도록 하자.

라우터 IP 접속 확인하기

우리가 라우터(공유기)에 접근하기 위해서는 공유기에서 제공하는 IP가 무엇인지를 알아야 한다. 일반적으로 iptime에서는 192.168.0.1을 쓰고 있지만 만약 이 공유기가 아니라면? 아래의 방법을 따라하면 된다.

  1. CMD를 실행한다.
  2. ipconfig -all을 입력한다.
CMD에서의 ipconfig 후 라우터IP 확인
나중에 쓰일테니 IPv4 주소에 있는 IP도 일단 기억해두자
  1. 기본 게이트웨이에 적혀있는 IP 주소를 인터넷 주소창에 입력한다.
  2. 접속한 공유기 설정 UI에서 포트포워드 설정 부분을 찾으면 된다.
  3. 규칙 추가 같은 것을 해서 아래의 방식으로 만들면 된다.
프로토콜외부 포트내부 포트내부 IP주소
TCP443 ~ 443443 ~ 443<방금 확인한 IPv4 주소>

여기까지 하면 이제 누군가가 우리의 공유기 IP 주소https를 통해 접속하려고 하면 그게 Windows PC를 타고, 다시 WSL2을 타고 그게 elabFTW까지 도달하게 된다.

이제 남은 것은 인터넷에서 라우터(공유기)까지 도달 시키는거다. 마지막 단계다!!

2‑2. DDNS (동적 DNS) 설정

현재 상태로도 외부로 노출된 공유기 IP를 입력하면 eLabFTW까지 잘 도달할 것이다. (공유기 IP는 원래 외부로 항상 노출 되어있다.) 그런데 매번 IP를 입력하는 것은 어렵지 않은가? 우리는 마치 naver.com을 입력해서 쓰는 것처럼 글자로 된 URL공유기 IP와 연결할 것이다.

만약 iptime을 사용하고 있다면 DDNS 서비스를 무료로 제공하고 있다.

상단에서 설명했던 공유기 설정 UI에 접속하도록 하자.

  1. 특수 기능에서 DDNS 설정을 들어가면 된다.
  • 만약 다른 공유기를 사용하고 있다면 안타깝게도 DDNS 서비스를 제공하지 않을 심산이 크다. 이 경우에는 하단의 방식으로 점프해서 읽도록 하자.
  1. 호스트 이름에 마음에 드는 것을 쓰면 된다. 그리고 갱신을 누르면 등록 IP 주소와 입력한 URL 주소가 연결된 것이다!
  2. 인터넷 주소창에 test.iptime.org과 같은 방식으로 입력해서 잘 접속되는지 보면 된다.

만약 다른 DDNS 서비스를 사용하고 싶다면?

  1. 무료 DDNS 제공 업체에 가입해야한다. 한국에는 정말 엄청난 무료 DDNS 서비스 제공업체가 있다. 내도메인한국이라고 하는 곳인데, 진짜 대박이다. 왼쪽 링크로 접속해보자.
전설의 내도메인한국. 위용이 엄청나다.
  1. 간단하게 회원가입을 진행한 뒤에 일반 도메인 검색에 사용하고 싶은 URL 주소를 입력하자. 그러면 아래 화면처럼 등록 가능한 URL들이 나온다.
  1. 등록하기를 누른다.
  1. 위 화면처럼 IP연결(A)를 선택하고 우측에 공인 IP를 입력하자. 공인 IP는 오른쪽 링크에서 확인할 수 있다. IP주소 확인하기
  2. 보안코드를 입력하고 수정하기를 누르면 적용 끝이다!

이제 https://<설정한 도메인(URL)> 로 접속하면 성공적으로 eLabFTW로 연결될 것이다.


이제 팀원 전체가 같은 네트워크 혹은 인터넷을 통해 eLabFTW에 접속하여 실험 데이터를 공유하고, 로그인·시그니처·백업 기능을 활용할 수 있다! 신진 교수들이여 널리널리 이 시스템을 사용하거라!

고급 사용자의 경우 아마 포트를 443 말고 다른 것을 사용하고 싶을거다. 최종적으로 eLabFTW에게 전달되는 것만 443이면 되므로 다양한 포트를 사용할 수 있긴 하다.


참고 자료

  • 직접 시스템을 세팅해본 내 지식

이 문서는 실제 테스트 환경(Windows 11 WSL2 Docker)에서 작성되었습니다. 각 단계는 사용 중인 라우터·방화벽·Docker 버전에 따라 약간씩 차이가 있을 수 있습니다. 언제든지 공식 문서와 병행해 주세요.