우분투, iptables 오류?

이 모든 일은 한 기사에서 비롯됐다. 블로그 글도 기사라 할 수 있는지 모르겠지만.
요즘엔 광의로 모든 매체의 글을 ‘기사’라고 해도 크게 틀린 표현은 아니란 생각이 들긴 한다.

아무튼, 그 글에서, Bitwarden 이란 비밀번호 관리자를 알게 됐고, 흥미를 느껴 설치를 해보려던 참이었다. 여기에 관한 내용은 설치를 한 뒤 다른 글에 써보기로 하고, 이 글에선 그에 얽힌 ‘꽃삽질’에 대해 기록한다.
왜 이런 일이 이리 자주 벌어지는지는.. 그 누가 알까.


시중에 나와있는 비밀번호 관리자는 꽤 많다. 지금은 기억이 가물가물한데, 예전 Palm 시절이었나, Windows Mobile 시절이었나부터 쓰던 ‘뭔가’가 있었다. 아마도 안드로이드로 넘어와서도 한동안은 그걸 썼었는데.. (아.. 그게 이름이 뭐였더라?)

찾아냈다! Alternative to 의 도움을 받아 예전 기억을 끄집어낼 수 있었다. 이미 잊혀진 상품이 됐는지, ‘Load more apps’ 를 두 번이나 해야 출력이 됐다. 아무튼, 그 제품은 SplashID 였다.

Alternative to 에 봐도 저렇게 많은 프로그램들 중에서, 현재 내가 쓰고 있는 프로그램은 mSecure 라는, 전혀 유명하지 않은 상품이다. 게다가 이건 리눅스 지원이 되지 않는다. Android, iOS, macOS, Windows 에서만 쓸 수 있다.

그럼에도 불구하고 구매한 이유는, 로컬 동기화가 된다는 점과 유형 정의가 가능하고, 사용자 필드(Field)를 만들 수 있기 때문이다. 생각보다 ‘유형’ (Type, 또는 Category 등)을 지원하는 프로그램이 별로 없고, 사용자 필드도 마찬가지다.
그 때문에, 리눅스 지원이 되지 않는다는 내겐 아주 큰 불편함을 무릅쓰고도 사용하고 있는 중인데..

그러다가 Bitwarden 을 알게 됐고, 한번 써볼까? 하는 중이다.
이걸 눈여겨 본 이유가 하나 있으니, 바로 (일종의) 로컬 동기화가 가능하기 때문이다. 대신 mSecure 처럼 기기간 동기화가 되는 건 아니고, 서버가 하나 있어야 한다.

서버야 뭐, 훌륭한 걸 만들어놨으니 그걸 써주면 되는데, 이를 위해선 Docker 가 필요하단다.

작년인가부터 관심은 많아서 글도 찾아보고, 책도 보고 했는데, 아직까지 개념이 잘 잡히지 않는다. Virtual Machine(Virtual Box 류의)과 유사한 개념이라고는 하지만, 뭔가 또 다르다고 하고.. 직접 써본 적이 없으니 글로만 보면 그저 뜬 구름 잡는 소리로 밖에 들리질 않네.

하여, Docker 공부도 할 겸, Bitwarden 을 사용해보기로 했다.
참고로, warden 은 감시자, 관리인, 보관자 등을 뜻한다고 한다. Bit 은 2진법의 그 Bit 일테고, 따라서 결국 비밀번호 관리자라는 뜻이 된다고 볼 수 있다.

Docker 는 우분투에서 그냥 바로 설치를 할 수도 있다. 하지만! 최신판을 좋아하는 얄팍한(?) 마음가짐에서, 내 손가락과 눈은 Docker 공식 설치 문서로 향했다.

문서대로 따라하면 설치에는 아무런 문제가 없다.
그런데!! 실행에서 난관에 부딪혀버렸다.

$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Tue 2020-04-14 10:50:19 KST; 49min ago
     Docs: https://docs.docker.com
  Process: 1467 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited
 Main PID: 1467 (code=exited, status=1/FAILURE)

Apr 14 10:50:17 testserv systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
Apr 14 10:50:17 testserv systemd[1]: docker.service: Failed with result 'exit-code'.
Apr 14 10:50:17 testserv systemd[1]: Failed to start Docker Application Container Engine.
Apr 14 10:50:19 testserv systemd[1]: docker.service: Service hold-off time over, scheduling restart.
Apr 14 10:50:19 testserv systemd[1]: docker.service: Scheduled restart job, restart counter is at 3.
Apr 14 10:50:19 testserv systemd[1]: Stopped Docker Application Container Engine.
Apr 14 10:50:19 testserv systemd[1]: docker.service: Start request repeated too quickly.
Apr 14 10:50:19 testserv systemd[1]: docker.service: Failed with result 'exit-code'.
Apr 14 10:50:19 testserv systemd[1]: Failed to start Docker Application Container Engine.

이렇게 뻥뻥 문제가 터져버린다.
검색 결과, Docker 실행 환경 검사 프로그램을 실행해보라는 글을 읽고, 그걸 돌려봤더니..

./check-config.sh 
warning: /proc/config.gz does not exist, searching other paths for kernel config ...
info: reading kernel config from /boot/config-5.3.0-46-generic ...

Generally Necessary:
- cgroup hierarchy: properly mounted [/sys/fs/cgroup]
- apparmor: enabled and tools installed
- CONFIG_NAMESPACES: enabled
- CONFIG_NET_NS: enabled
- CONFIG_PID_NS: enabled
- CONFIG_IPC_NS: enabled
- CONFIG_UTS_NS: enabled
- CONFIG_CGROUPS: enabled
- CONFIG_CGROUP_CPUACCT: enabled
- CONFIG_CGROUP_DEVICE: enabled
- CONFIG_CGROUP_FREEZER: enabled
- CONFIG_CGROUP_SCHED: enabled
- CONFIG_CPUSETS: enabled
- CONFIG_MEMCG: enabled
- CONFIG_KEYS: enabled
- CONFIG_VETH: enabled (as module)
- CONFIG_BRIDGE: enabled (as module)
- CONFIG_BRIDGE_NETFILTER: enabled (as module)
- CONFIG_NF_NAT_IPV4: missing
- CONFIG_IP_NF_FILTER: enabled (as module)
- CONFIG_IP_NF_TARGET_MASQUERADE: enabled (as module)
- CONFIG_NETFILTER_XT_MATCH_ADDRTYPE: enabled (as module)
- CONFIG_NETFILTER_XT_MATCH_CONNTRACK: enabled (as module)
- CONFIG_NETFILTER_XT_MATCH_IPVS: enabled (as module)
- CONFIG_IP_NF_NAT: enabled (as module)
- CONFIG_NF_NAT: enabled (as module)
- CONFIG_NF_NAT_NEEDED: missing
- CONFIG_POSIX_MQUEUE: enabled

후략..

NAT 관련 커널 모듈이 두 개나 빠져있었음을 알게 되었다. 실행 환경은 우분투 서버 18.04 이고, VBox 에 설치되어 있다.

왜??

그리하여 꽃삽질은 시작되었다. 커널/모듈 관련 꾸러미(linux-image-*)를 다시 설치해보기도 하고, 이리 저리 뒤지고 했는데, 답이 보이지 않았다.

또, 관련 프로그램인 ufw 를 돌리니 이런 오류가 나왔다.

$ sudo ufw status
ERROR: problem running iptables: modprobe: FATAL: Module ip_tables not found in directory /lib/modules/5.3.0-46-generic
iptables v1.6.1: can't initialize iptables table `filter': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

보통 이런 오류가 나왔을 때, 저 문구 그대로 구글 검색을 하면, 해결방법을 그리 어렵지 않게 찾을 수 있다. 저런 문제가 나한테만 생겼을 리도 없고, 내가 1등을 할 리도 없기 때문인데.. 이 문제는 달랐다.

비슷한 경우는 있었지만, 그건 Raspberry Pi 류의 기기에서 발생한 문제였고, 해결이 된 듯 했다.

ip_tables, 즉, ip_tables.ko 가 없어서 ufw 가 제대로 작동하지 않는다는데, 도대체 뭘까? 왜 없을까? 어떻게 하면 설치할 수 있을까?
이리 저리 고민하다가, 커널 모듈이 들어있는 다음 디렉토리를 살펴봤다.

$ ll /lib/modules/5.3.0-46-generic/kernel/net/ipv4/
total 24
drwxr-xr-x  2 root root   80 Apr 13 23:09 ./
drwxr-xr-x 17 root root  340 Apr 13 23:09 ../
-rw-r--r--  1 root root 9513 Mar 31 11:40 gre.ko
-rw-r--r--  1 root root 9961 Mar 31 11:40 udp_tunnel.ko

흠?
뭔가 많이 허전하다. 듬성듬성도 아니고, 그야말로 휑~~ 하니.
ip_tables.ko 는 당연히 없다.

다른 18.04 서버에서 확인해봤다.

$ ll /lib/modules/5.3.0-46-generic/kernel/net/ipv4/
total 468
drwxr-xr-x 1 root root   712 Apr 13 23:37 ./
drwxr-xr-x 1 root root   586 Apr 13 23:37 ../
-rw-r--r-- 1 root root 16401 Mar 31 11:40 ah4.ko
-rw-r--r-- 1 root root 23049 Mar 31 11:40 esp4.ko
-rw-r--r-- 1 root root 10985 Mar 31 11:40 esp4_offload.ko
-rw-r--r-- 1 root root 25217 Mar 31 11:40 fou.ko
-rw-r--r-- 1 root root  9513 Mar 31 11:40 gre.ko
-rw-r--r-- 1 root root 25721 Mar 31 11:40 inet_diag.ko
-rw-r--r-- 1 root root  9617 Mar 31 11:40 ipcomp.ko
-rw-r--r-- 1 root root 36697 Mar 31 11:40 ip_gre.ko
-rw-r--r-- 1 root root 20361 Mar 31 11:40 ipip.ko
-rw-r--r-- 1 root root 28449 Mar 31 11:40 ip_tunnel.ko
-rw-r--r-- 1 root root 19249 Mar 31 11:40 ip_vti.ko
drwxr-xr-x 1 root root   884 Apr 13 23:37 netfilter/
-rw-r--r-- 1 root root  9289 Mar 31 11:40 raw_diag.ko
-rw-r--r-- 1 root root 14689 Mar 31 11:40 tcp_bbr.ko
-rw-r--r-- 1 root root 10393 Mar 31 11:40 tcp_bic.ko
-rw-r--r-- 1 root root 12665 Mar 31 11:40 tcp_cdg.ko
-rw-r--r-- 1 root root  9345 Mar 31 11:40 tcp_dctcp.ko
-rw-r--r-- 1 root root  7569 Mar 31 11:40 tcp_diag.ko
-rw-r--r-- 1 root root  7169 Mar 31 11:40 tcp_highspeed.ko
-rw-r--r-- 1 root root  9473 Mar 31 11:40 tcp_htcp.ko
-rw-r--r-- 1 root root  7625 Mar 31 11:40 tcp_hybla.ko
-rw-r--r-- 1 root root  8601 Mar 31 11:40 tcp_illinois.ko
-rw-r--r-- 1 root root  8177 Mar 31 11:40 tcp_lp.ko
-rw-r--r-- 1 root root 11793 Mar 31 11:40 tcp_nv.ko
-rw-r--r-- 1 root root  6057 Mar 31 11:40 tcp_scalable.ko
-rw-r--r-- 1 root root  9897 Mar 31 11:40 tcp_vegas.ko
-rw-r--r-- 1 root root  7161 Mar 31 11:40 tcp_veno.ko
-rw-r--r-- 1 root root  7513 Mar 31 11:40 tcp_westwood.ko
-rw-r--r-- 1 root root  7233 Mar 31 11:40 tcp_yeah.ko
-rw-r--r-- 1 root root 10753 Mar 31 11:40 tunnel4.ko
-rw-r--r-- 1 root root 11697 Mar 31 11:40 udp_diag.ko
-rw-r--r-- 1 root root  9961 Mar 31 11:40 udp_tunnel.ko
-rw-r--r-- 1 root root  8361 Mar 31 11:40 xfrm4_tunnel.ko

이런..???
ip_tables.ko 는 netfilter 디렉토리 아래에 있고, 여기선 ufw 가 제대로 돌아가고 있었다.

아.. VBox 에 우분투 서버가 3개가 있는데, 하필이면 문제가 있는 이 서버에 Docker 를 설치해서 이런 꽃삽질로 빠지다니!!
VBox 에 설치된 서버들은 그냥 연습용이었는데, 아마도 이런 저런 장난질(?)을 하다가 시스템이 불안해진 모양이다.

허허허허허허허허!!!

제대로 작동하는 우분투 서버(18.04)에서 Docker 를 설치(저장소 추가), 실행했더니, 아무런 이상도 없었다.

아 SS!!!!


그렇다고 해도, 왜 커널 모듈 재설치는 안되는 걸까? 이건 꾸러미 설치의 문제가 아닌건가? 도무지 알 수가 없네 그려.

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.