ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CentOS 8 Stream 전환 및 WireGuard Docker 서버 재구축기
    IT,컴퓨터/서비스,웹,소프트웨어 2021. 11. 30. 10:30
    하단 광고는 티스토리가 임의 삽입하여 노출되고 있습니다
    728x90

    전에도 글 적었지만 저는 일본 클라우드 서비스 업체인 Conoha에 VPS를 임대해 사용하고 있습니다.

    지난 5월에 RAM 업그레이드겸 가상머신을 다시 만들면서 OS를 CentOS 7.x -> 8.x 로 업그레이드했는데,

    아는 분들은 아시겠지만 CentOS 8은 2021년을 끝으로 보증이 만료됩니다[바로가기].

    Stream 8로 이관하거나 다른 OS로 전환하거나(Stream의 불안정성이 마음에 안든다면) 다른 방법을 찾아야 하죠.

     

    저는 처음부터 Stream 8로 전환할 생각이었기에 지난 월요일부터 틈날때 작업을 했었습니다.

    그때 이야기들을 정리할까 합니다.

     

    아래에는 기기 캡쳐 이미지 10장이 쓰였으니 참고하시고,

     

    더보기

     

     

    -- 목  차 --

    누르시면 바로 이동합니다.

     

    1. CentOS 8 Stream으로의 전환

    2. openVPN-AS Docker 를 WireGuard Docker로 전환

     

     

    1. CentOS 8 Stream으로의 전환

    CentOS와 CentOS Stream은 완전히 다른 흐름으로 관리될 예정입니다만, Stream으로 전환하는 방법은 간단한 편입니다.

    그래도 제 경우는 주요 기능인 VPN서버나 라디오 녹음/녹화를 Docker 이미지로 만들어서 호스트의 영향을 최대한 덜 받게 했다고 생각했으므로 + 기능이 멈춰도 크리티컬하진 않은 서버이기 때문에 업데이트를 시도하긴 했습니다.

    혹시 OS 이외에 추가 설치하신 패키지의 영향도가 궁금하다면 사전에 확인해 보시길 권합니다.

     

    How to Migrate From CentOS 8 to CentOS Stream from linode

    CentOS Download from CentOS.org

     

    작업은 크게 위 링크 내용들을 참고했습니다.

     

    첫번째 링크에서 큰 틀의 흐름을 참고하고, 중간에 레포지토리를 전환하는 명령어 실행시에는 에러가 발생하여 CentOS 공식 홈페이지의 Stream 8 탭 클릭시 하단에 표시되는 전환 명령어를 참고합니다.

     

    이 글에서는 작업시 사용하는 명령어를 모두 나열하면서 정리해나갈 예정입니다.

     

    우선, 현재 패키지 전체를 최신으로 업데이트해 둡니다.

    패키지 정보를 보면, 다음에 설치해야 하는 centos-release-stream 은 CentOS 8.1.1-1911 이상이 필요하다고 나오네요[바로가기]

    물론 7.x 를 사용중이시라면 우선 8.x로의 업그레이드가 필요합니다.

    여기서는 CentOS 8.x 버전에서의 작업을 다룹니다.

     

    centos-release-stream 패키지 설치에는 그리 오랜 시간이 걸리지 않았습니다.

     

    이제 리포지토리를 CentOS에서 CentOS Stream 으로 전환하겠습니다.

     

    이 작업으로 기본 리포지토리가 Stream이 됩니다.

     

    이 작업 역시 그리 오랜 시간이 걸리진 않습니다.

     

    그리고 다음 작업이 마지막인데, 여기서는 시간이 좀 걸리실 수 있습니다.

    CentOS 8 서버에 리포지토리만 Stream 8로 변경한 상태니, 이걸 Stream 리포지토리의 패키지와 일치시킬 차례입니다.

     

     

    잠시 기다리면 작업이 완료되고, 서버를 재구동하면 전환 작업은 끝입니다.

    이제 기존에 동작하던 기능이 정상인지 확인하시면 되겠습니다.

     

    제 경우는 녹음작업 가볍게 보고(녹화 테스트용 스크립트) 기본 패키지 위주로 짠 체크용 쉘 정도 확인했습니다.

    제일 신경쓰였던 NAS와의 파일 자동전송도 문제없이 끝났고, 결국 전환하고 추가작업한 부분은 전혀 없네요.

     

    앞으로 제 필요에 의해 추가될 기능들은 가능하면 Docker 를 통할 생각이니, 폭풍같은 업데이트가 와도 일단은 큰 걱정 안하려고 합니다.

     

     

    다만, 생각치도 못한 복병이 있었습니다.

     

     

    2. openVPN-AS Docker 를 WireGuard Docker로 전환

    먼저 언급한 VPS 업그레이드 당시, CentOS 8.x에서 비정상 동작하는 openVPN-AS 패키지 때문에 며칠을 고생했었습니다.

    결국 이를 Docker 화 한 이미지 덕분에 호스트OS와의 연결고리도 많이 끊고 아주 깔끔하게 해결했었죠.

     

    ...근데 쓰다가 의외의 문제를 만났습니다.

     

    저는 최근까지도 두달마다 서버를 업그레이드(yum update) 하고 재시작했는데, 이번달에 업그레이드하고 재시작한 뒤부터 openVPN-AS Docker 서버로 VPN 접속을 못하더군요.

     

    대충 인증에 실패했다는 뜻

    애플리케이션 말고 웹 관리자 페이지로 로그인하려고 했더니 이런 에러가 납니다.

     

    위 에러메시지로 검색하니 제가 설치했던 openVPN-AS Docker 레포지토리의 issue 가 검색되어 나왔는데,

     

    Admin login: SESSION ERROR: SESSION: Your session has expired, please reauthenticate (9007) #113

     

    끝에 가면 올해 5월쯤 리포지토리를 닫고 WireGuard를 쓰라고 해 놓았습니다(...)

     

    https://forums.openvpn.net/viewtopic.php?t=29782

     

    검색하다 보니 공식 포럼에서 이런 글도 찾았습니다만, openVPN 입장에서도 Docker 화 한 openVPN-AS의 에러는 기술지원 대상이 아니고,

    Docker 이미지 만든 그룹에서도 유지보수를 포기한지라 의미없는 생명연장이라는 생각이 들었습니다.

    이쯤에서 openVPN-AS 살리는건 포기하기로 결정.

     

     

    https://github.com/linuxserver/docker-wireguard

     

    WireGuard를 살펴보니 아직 개발중이긴 해도 개인 용도로 쓰기엔 부족함이 없어 보였습니다.

    WireGuard Docker 와 관련된 설명은 같은 개발그룹이 만든 이 레포지토리에서 확인할 수 있었구요.

     

    저는 따로 Dockerfile을 빌드하는 대신 Docker Hub에 올려진 최신 이미지를 사용했습니다.

    그리고 CentOS 8 Stream 기준으로 아래와 같은 사전작업이 필요했습니다

    (사전작업 없이 하다가 에러를 경험하고 해결한 부분)

     

    바로 위에도 출처가 있는데, 이 레포지토리의 issues 페이지를 검색하다 찾았습니다. [바로가기]

    이따가 WireGuard Docker 컨테이너 생성할 때 시스템 modules 폴더를 매핑해줘야 하는데,

    여기에 WireGuard 모듈이 설치가 안되어있으니 컨테이너는 실행되는데 서비스가 에러나더군요.

     

    설치엔 약간 시간이 소요됩니다.

     

     

    iptables 모듈이 실행중인지도 확인이 필요합니다.

    다 설치하고 나서 라우팅을 위해 iptables 명령어 실행을 시도하는데, 여기서 에러가 나니 인터넷 접속을 못하더군요.

     

    iptables는 보통 기본적으로 설치되어 있으니 설치를 하셔야 하는 상황까지는 안가리라 생각합니다.

    아무튼 CentOS 8 Stream 기준으로는 모듈만 실행하면 작업에 문제는 없었습니다.

    아, 위 코드에 있는 참고 커뮤니티는 여기에서 열어보실 수 있습니다.

     

     

    P.S

    2022.7.9 P.M 3:10분경 추가.

     

    각 모듈을 부팅시 자동 Load하기 위한 설정도 추가하면 편리합니다.

    근래 서버 dnf, yum 업데이트도 스크립트로 자동화했더니 나름 더 필요해졌고.

     

    이렇게 설정을 등록하시면 다음번 재부팅때는 Boot시에 등록한 파일명 모듈을 자동으로 로드합니다.

    ///

     

    자, 그럼 작업을 시작해 봅시다.

     

    우선 설정파일이 저장될 호스트의 경로를 생성하고 방화벽 정책을 등록합니다.

    저는 WirdGuard 전용 config 경로를 만들어서 지정했는데, 이따가 컨테이너 생성할때 경로 지정만 하면 되니 편한대로 하시길.

    방화벽의 경우, WireGuard가 사용하는 UDP 51820 포트를 미리 열어두는 작업입니다.

    CentOS 8 Stream 기준이니 다른 OS에서는 그에 맞는 명령어로 설정해주시면 됩니다.

     

    그리고 아래 명령어로 컨테이너를 생성하면, 알아서 필요한 이미지를 다운받고 컨테이너 안에서 초기 작업을 진행합니다.

    각 옵션은 먼저 링크한 리포지토리의 README 이 부분을 참고하시면 됩니다.

    일단 참고삼아 제가 생성할때 쓴 명령어를 같이 적었습니다.

     

    에러없이 실행이 되었는지는 config 저장경로로 매핑한 아까 그 경로에 파일이 생성되었는지를 보면 됩니다.

    그리고 파일이 뭔가 많이 비었다면, Docker 로그를 보며 원인을 찾아봐야겠지요('Docker logs 컨테이너ID' 명령)

     

    컨테이너가 정상적으로 기동되었다면 이런식으로 Docker logs 명령어로 컨테이너 로그를 확인했을 때

    로그와 함께 클라이언트 접속용 QR코드가 찍힙니다. (아래 하얀 줄 아래쪽으로 QR코드 모양이 있음)

     

    아까 config 파일 저장경로로 설정한 경로에 peer_(아이디) 규칙으로 폴더가 생깁니다.

    그 폴더 안에 들어가보면 인증용 Key와 함께 접속용 QR코드 이미지파일이 저장되어 있으니 연결할때 참고하시길.

    (WireGuard 모바일 앱 설치하면 연결정보 등록시 QR코드 선택 가능)

     

    제 경우는 여기까지 되서 안도하며 연결해봤는데, 서버까지만 접속되고 인터넷 연결을 못했습니다. (앱에서 수신 데이터가 없었음)

    라우팅 설정을 의심하며 Docker 로그를 보니 역시나 그쪽 문제더군요.

     

    iptables 에러 관련으로 조치한게 이런 에러 때문입니다.

     

    위에서 언급했던 iptables 모듈 활성화 후 컨테이너를 재시작하면,

     

    이렇게 에러 없이 깔끔하게 끝나고, 다시 연결해보니 제대로 서버의 IP를 잡더군요.

     

    이런식으로 말이죠. radiko 와 같은 일본 IP가 필요한 서비스도 잘 작동됐습니다.

     

    openVPN과 가장 큰 차이라면 역시 기기에서 QR코드를 읽어들이는것 만으로도 설정이 가능하다는것 정도겠네요.

    openVPN-AS 관리자 페이지에 접속해서 살짝 설정 바꿔주고 계정 등록하고 했던 부분을, 여기서는 컨테이너 생성할때 환경변수만 넣어주면 인증정보가 모두 자동생성.

     

    아직은 개발중이라 기업에서 쓸 만큼의 안정성을 확보하지는 못했다고 합니다만, 개인 용도로 쓰기에는 이정도도 충분하다는 인상입니다.

    밖을 이동하면서(LTE 등 모바일 네트워크) 인터넷 접속환경이 불안정해지면 또 모르겠는데, 일단은 대체할 VPN 서버를 구축한게 제일 마음에 놓이네요.

     

    혹시 관심있는 분들 있으셨음 도움 되길 빕니다.

     

     

    이번 글은 여기까지.

     

    이런 서버 관련 작업은 꾸준히 할일이 생기는것 같습니다.

    개인 프로젝트 수준인데도 이러는거 보면 전장에 계시는 분들은 더 많은 정보들이 흘러가겠죠.

    아직까지는? 이런 부분들도 귀찮긴 하지만 성취감은 있네요. 실제로 쓰고 있기도 하니.

     

    이런저런거 하다보니 11월도 마지막 날입니다. 11월 마무리 잘 하시고, 주말쯤의 다음 글에서 뵙겠습니다.

    12월도 잘 부탁드립니다!

    댓글

Designed by Tistory.