::: IT인터넷 :::

wsl 환경에서 Docker 설치 이후 172.18.x 대역 연결 불가

곰탱이푸우 2022. 2. 24. 08:20
사내망에서 172.1x.x 대역을 사용하는 경우 Docker 네트워크를 추가하는데 주의가 필요하다.
 
사내에서 172 대역의 사설 네트워크를 사용하는데, Docker Network를 추가한 이후 해당 대역 연결이 되지 않는 증상이 발생했다.
 
그 외에 인터넷이나 다른 망대역에는 정상적으로 접근이 되어서, 프록시 설정이나 네트워크 자체의 문제는 아닌 것으로 보였다.
 
네트워크 설정 초기화까지 진행하며 삽질을 했는데, 원인은 정작 가까운 곳에 있었다.
 

원인

Docker Desktop의 유료화 정책으로 인해 윈도우 환경에서 WSL로 사용 중이므로, WSL 환경을 기준으로 정리한다.
아래 명령으로 네트워크 정보를 확인한다.
> wsl

$ ip addr

 

윈도우 네트워크와 연결 된 eth0를 제외하고, docker0와 br-로 시작하는 네트워크가 확인된다.
해당 네트워크의 IP를 확인해보면 172.1x.x 대역 또는 172.2x.x 대역을 사용하는 것을 확인할 수 있다.
 
br-로 시작하는 네트워크는 Docker에서 사용하는 네트워크로 아래 명령으로 생성 가능하다.
# Docker 네트워크 생성
$ docker network create 네트워크이름

# Docker 네트워크 목록 확인
$ docker network ls

# Docker 네트워크 상세 정보 출력
$ docker network inspect 네트워크이름
 
실제로 docker network ls로 네트워크 목록을 확인하고, inspect로 정보를 출력해보면 172.x 대역을 사용하는 것으로 확인된다.
 
172.18.x 대역으로 연결되지 않는 경우에는, 해당 대역을 사용하는 docker network가 존재했다.
시스템은 외부 172.x 대역이 아닌 내부 172.x 대역으로 연결을 시도하면서 해당 증상이  발생한 것이다.
 
 

조치 방법

가장 좋은 방법은 Docker 네트워크의 IP 대역을 172.x 대역이 아닌 10.x 대역으로 변경하는 것이다.
참고로 172.x 대역은 사설 IP B 클래스에 해당하고, 10.x 대역은 사설 IP A 클래스에 해당한다.
 

bip 주소 변경

Docker의 daemon.json 파일을 열고 bip 설정을 변경한다.
docker container가 사용하는 bridge network의 대역을 변경한다.
$ sudo vi /etc/docker/daemon.json

# bip 항목을 추가한다.
{
        "insecure-registries":["MARCO", "Ocean", ...],
        "bip": "10.10.0.1/24" # 이 부분을 추가한다.
}
# Esc + wq를 눌러 저장
 
이후 Docker 서비스를 재시작한다.
wsl 환경에서는 systemctl과 service 명령어가 잘 동작하지 않는 점을 참고한다.
재시작이 어려우면 시스템을 재부팅한다.
 
wsl 쉘에서 ifconfig -a 명령을 수행하여 docker0 어댑터의 IP 주소를 확인한다.
10.10.0.1로 변경되었으면 성공한 것이다.
 

default-address-pools 구성

docker network가 사용하는 대역인 default-address-pools 항목을 적용한다.
 
먼저 아래 명령으로 Docker Network를 확인하고 bridge 들을 제거한다.
# bridge 타입의 네트워크 이름 확인
$ docker network list

# bridge 타입의 네트워크 삭제
$ docker network rm 네트워크이름

 

/etc/docker/daemon.json 파일에 아래 내용을 추가한다.
$ sudo vi /etc/docker/daemon.json

# bip 항목을 추가한다.
{
        "insecure-registries":["MARCO", "Ocean", ...],
        "bip": "10.10.0.1/24",
        "default-address-pools": # 이 부분을 추가한다.
        [
          {"base":"10.10.0.1/16","size":24}
        ]
}
# Esc + wq를 눌러 저장
 
이후 Docker 서비스를 재시작한다.
wsl 환경에서는 systemctl과 service 명령어가 잘 동작하지 않는 점을 참고한다.
재시작이 어려우면 시스템을 재부팅한다.
 
이후 삭제 했던 bridge 타입의 네트워크들을 재생성한다.
# 삭제했던 bridge 타입의 네트워크 생성
$ docker network create 네트워크이름

# Default가 Bridge 타입이라 추가 옵션은 지정하지 않아도 된다.

# 아래 명령으로 해당 네트워크의 IP 대역을 확인한다.
$ docker network inspect 네트워크이름

 

Docker 네트워크의 IP 대역이 10.10.x.x 대역으로 표시되면 된다.
 
 

증상 확인

해당 설정을 적용한 이후 172.18.x 대역에 대해 정상적으로 연결되었다.
 
아래 포스팅을 참고하였다.