리눅스를 직접 깔아서, NAS를 돌리게 되는 경우 이미 자주 경고한바 있지만 유지보수에 에너지와 시간이 소비된다.

문제 해결능력에 따라서 그것은 무제한이 될 수 도 있고, 의외로 금새 잘 해결하여 시놀리지 같은 상용NAS보다 훨씬 다채롭고 화려하게 활용하는 사람도 있을 것 이다.

본 시리즈 포스트는 지금까지 내가 겪으면서 가장 크리티컬 했었다고 느낀 부분을 적어 볼 것 이다.

이번 문제는 네트워크 주제이다. NAS니깐 네트워크 관련 문제는 대단히 치명적이다.

사용자는 이러한 문제를 주로 인터넷이 안된다. 내부 접속이 안된다 등으로 체감하게 될 것 이다. 나 또한 그렇다.

증상 : 잘되던 인터넷과 내부 네트워크 접속이 갑자기 재부팅 후 안된다.

인터넷에 연결할 수 없다는 웹브라우져의 에러메세지

그런데, 아마도 인터넷만 안되는게 아니고 외부에서 NAS에 접속도 안 될 것 이다.

놀라운 것은 ip주소는 이미 공유기(DHCP서버)로 부터 잘 할당이 되어 있다. ip주소를 부여 받았다는 것은 인터페이스가 있기 때문에 가능한 것이므로, 인터페이스 up을 했니 안했니는 현재 따질 필요는 없다.

Ubuntu Network Manager에서 IP주소 확인

우분투 Network Manager는 워낙 욕을 많이 먹는 도구라서, 그냥 아예 터미널에서 상황을 재확인 해보겠다.

터미널에서의 상황

eno1 인터페이스(NIC)는 DHCP로 부터 192.160.X.X이라는 주소를 분명히 받은 상황이고 나머지 NIC들은 모두 꺼놨다.

ping을 192.168.X.1 라는 내부게이트웨이로 쏴보고, 심지어 자신의 Loop Back ip인 127.0.0.1로 쏴도 응답이 없다.

즉, 패킷이 전혀 밖으로 나가지 않는 것이다. 인터넷이 안되는건 들어오지도 못한다는 뜻…

즉, 인터페이스 NIC가 켜져있고, ip주소도 분명히 할당 받았다면 이것은 십중팔구 방화벽의 문제이다.

그럼 문제는 공유기의 방화벽에 걸린것이냐, 기기 자체방화벽에 걸린것이냐에 문제인데

본 포스트에서는 2가지 단서가 있었다.

첫째, 잘되던 인터넷이 재부팅 후 안된다는 것이었다. 그러므로 당연히 공유기의 방화벽 문제일리는 없다. 왜냐면 공유기는 손을 댄적이 없으니깐

둘째, 위에 이미지에 나와 있지만 loopback ip 주소인 127.0.0.1 도 패킷이 발송되지가 않는다. 즉 공유기까지 가기도전에 차단되었다는 뜻이다.

그러면 방화벽 상태가 현재 어떻길래 그러한가?

ufw 방화벽의 status

우분투의 방화벽 도구인 ufw의 현재 상태이다. 분명히 inactive 상태에 있다. reload를 해도 inactive 상태이니 아무런 변화를 주지 않는다.

아…대단히 황당한 상황이다.

그러던 중 열심히 구글링을 하던 중, 해결 방법을 찾아냈다.

https://stackoverflow.com/questions/41319291/ufw-blocks-most-ports-until-disabled-and-re-enabled-after-reboot

이문제가 위에 링크에 의하면 발견된 것이 2017년이니 Ubuntu 17.04 Zesty Zapus 부터는 해당 문제를 앓고 있음이 확실하고, stable 버젼을 대부분 많이 쓰니 아마도 16.04 Xenial Xerus 부터 아마도 문제가 있지 않았을까 추정해 본다.

현재 내 우분투는 20.04 Focal Fossa이고 본 문제를 겪고 있으니, 앞으로도 이런 문제는 계속 나올 수 있으므로 본 포스트는 우분투를 쓰는 많은 분들에게 의미가 있지 않을까 한다.

원인 : 그냥 우분투 프로그램 버그임

우분투 Network Manager든, UFW던 모두 우부투에서만 쓰이는 자체 프로그램이다. 이놈들이 커널에 포함된 프로그램들과 호환이 잘안되는 것이다. 더 세부적으로 들어가기엔 내가 리눅스 전문가가 아니라서 여기까지만 하고….

해결방법 : ufw를 아예 활성화 시키고, 기본 정책을 allow로 해주며 부팅시 설정을 reload 시켜 준다.

vi 편집기로 /etc/ufw/ufw.conf 파일을 열고 아래와 같이 바꿔준다.  기본값은 no 였을 것이다.

그리고, ufw의 기본 정책을 아예 allow 바꿔준다.
(이렇게 하면, 모든 방화벽을 해제하는거나 다름이 없기 때문에, 추천하지 않는 방식이지만 Ubuntu는 원래 ufw가 기본으로 inactive상태이다. 따라서 이렇게 하는 것을 너무 불편해 할 필요는 없다. 게다가 나의 경우 NAS가 어차피 공유기 하단레이어에 위치해 있기 때문에 비교적 안전하다. 하지만, NAS가 공유기 하단에 있지 않고 인터넷  WAN에 바로 노출되는 상황이라면 상황이 완전 다르다. 그럴 경우는 ufw 방화벽을 제대로 공부해보시기를 바란다.그렇지 않으면 지속적인 외부에서의 해킹시도에 골머리를 앓아야 할 것이다.)

Copy to Clipboard
Copy to Clipboard

그런후, ufw 방화벽을 부팅시 마다 재설정하게 해준다.

vi편집기로 해당 경로에 파일을 생성하고 내용을 채워준다. /etc/systemd/system/ufw-reload.service

Copy to Clipboard

그런 다음에, 위에 보이는 원하는 디렉토리에 ufw-firewall-reload.sh 를 만든 후 아래와 같이 내용을 입력해 둔다.

그런 후, 실행가능한 파일의 형태로 변경해 둔다.

Copy to Clipboard
Copy to Clipboard

모두 완료되었으면, 아래와 같이 부팅할때마다 ufw방화벽 설정이 갱신되도록 서비스를 실시한다.

Copy to Clipboard

모두 완료되었다면, 재부팅을 해보고 실제로 동작에 문제가 없는지 확인해 볼 것…

다만, 본 작업은 원격터미널에서 하지 말고 NAS기기에서 직접 수행하기를 바란다.(이미 네트워크가 마비된 상황이면 직접 할 수 밖엔 없겠지만…)

방화벽이란건 까딱 잘못 만졌다가는 모든 연결이 끈길것이기 때문이다. 일단 끈기면 원격에서는 손도 못쓴다.