홈 서버 SSH 연결 오류 해결하기

2025. 1. 31. 18:38·해결 및 개선

홈 서버에서 간헐적으로 발생하는 SSH 연결 오류를 해결한 기록이다.

GPT는 포트포워딩이나 방화벽 같은 똑같은 얘기만 반복하고, 열심히 구글링을 해보았지만 해당 케이스를 찾지 못하여서 하나하나 확인해보면서 해결하기로 하였다.

 

 

환경

우분투를 설치한 노트북에서 wifi를 이용하여 홈 서버를 구축한 상태이다.

서버 운영체제: Ubuntu 24.04.1 LTS

 

 

문제 상황

잘 되던 SSH 연결이 간헐적으로 timeout되는 현상이 발생하였다.

> ssh jw@jwserver.ddns.net -p 10022
ssh: connect to host jwserver.ddns.net port 10022: Connection timed out

 

아까 전까지는 SSH 연결이 잘 되다가도, 갑자기 연결이 안 되는 경우가 있었다.

열심히 고치려고 설정을 확인하고 변경해보아도 여전히 연결이 안 되었는데, "아무것도 하지 않고 몇 분 혹은 몇 시간 이후에 다시 시도했을 때" 연결이 되는 경우가 많았다.

기다리면 고쳐지는 문제이긴 했지만 내가 문제를 찾아 고친 게 아니라 매우 찜찜했고, 다시 연결이 될 때까지 기다리기만 하는 것이 너무 싫어서 하나하나 뜯어보며 문제를 찾아보기로 했다.

 

 

I. 서버 내부 설정 확인

아무 설정도 건드리지 않아도 문제가 생기거나 해결되었기 때문에, 서버 내부 설정 문제는 아닐 것 같았지만 그래도 확인해보았다.

 

1. 먼저 ssh 설정에서 22번 포트 확인 

$ cat /etc/ssh/sshd_config

...

Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

...

22번 포트로 설정되어 있고, ListenAddress 값도 기본값인 모든 ip(0.0.0.0)로 잘 설정되어 있는 것을 확인하였다.

 

2. ufw 방화벽 규칙 확인

$ sudo ufw status verbose

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
22 (v6)                    ALLOW IN    Anywhere (v6)

22번 포트가 정상적으로 열려있다.

 

3. ssh 서비스의 상태 확인

jw@jwserver:~$ sudo systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Sun 2025-01-26 01:40:57 UTC; 5 days ago

active 상태로 정상적으로 출력된다.

 

4. 무선 네트워크의 상태 확인

$ ip a
3: wlp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

...

UP 상태로, 네트워크에 잘 연결되어 있는 상태이다.

 

 

II. 공유기 설정 확인

공유기 또한 설정을 건드리지 않아도 문제가 생기거나 해결되었기 때문에, 공유기 문제도 아닐 것 같았다.

 

현재 네트워크 상태는 다음과 같다.

- 빨간색 화살표: 셀룰러 데이터를 이용한 ssh 접속

- 파란색 화살표: 같은 사설 네트워크 내에서 ssh 접속

 

두 접속 모두 `Connection timed out`이 발생하는 상황이다.

 

 

1. 고정 DHCP 설정 확인

라우터에서 홈 서버에 대한 ip를 고정적으로 할당할 수 있도록 MAC 주소에 대해서 고정 DHCP를 할당한 상태이다.

`ip a`로 확인한 ip주소와 동일하기 때문에 정상적으로 동작하고 있는 것을 확인하였다.

 

2. DDNS 설정 확인

모뎀에서 유동 IP인 public IP를 특정 Domain에 자동으로 매핑해주는 DDNS를 사용 중이다.

DDNS 갱신도 잘 이뤄지고, 해당 Domain으로 `ping`을 보내봤을 때에도 정상적인 응답이 왔다.

따라서 DDNS는 정상적으로 작동하고 있다는 것을 알 수 있다.

 

 

III. 내부망에서의 접속 확인

같은 공유기 내의 내부망 접속, 그리고 셀룰러 데이터를 통한 외부망 접속에서도 동일한 증상을 보였다. 따라서 내부망에서의 문제를 먼저 해결하면 외부망 접속 문제는 자연히 해결될 것이라고 생각하였다.

 

1. TCP 연결 테스트

nc -zv 192.168.123.110 22
nc: connect to 192.168.123.110 port 22 (tcp) failed: No route to host

ssh 포트에 대해 tcp 연결을 해보아도 `No route to host` 오류가 발생한다. 

마치 서버가 꺼져 있거나, 해당 포트가 포트포워딩되지 않았을 경우와 동일한 증상이 나타났다.

 

2. 홈서버에서 외부로의 Ping 테스트

외부(private/public 네트워크)에서 접근이 불가한 상태이므로, 홈서버에서 직접 외부로 가는 요청을 테스트해보기로 하였다.

 

결과는 캡처를 하지 못해서 기억을 바탕으로 작성해보았다.

홈 서버에서 직접 외부로 ping을 쏴보았다.

$ping 8.8.8.8
...
64 bytes from 8.8.8.8: icmp_seq=4 ttl=52 time=240 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=52 time=60.5 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=52 time=60.5 ms
64 bytes from 8.8.8.8: icmp_seq=7 ttl=52 time=60.6 ms
64 bytes from 8.8.8.8: icmp_seq=8 ttl=52 time=60.3 ms
64 bytes from 8.8.8.8: icmp_seq=9 ttl=52 time=60.6 ms
--- 8.8.8.8 ping statistics ---
9 packets transmitted, 6 received, 33% packet loss, time 8005ms

네트워크 환경이 원활한데도 불구하고, 초반 3~6개의 패킷이 손실되고 이후에 연결되는 상황을 발견했다.

이후 ssh 타임아웃 증상이 나타날 때마다 테스트해보았는데, 항상 초반 패킷이 손실되었다. ssh 오류가 발생하지 않을 때에는 패킷 손실이 발생하지 않았다.

 

홈서버에서 ping을 함으로써 연결이 새로 형성되는 것 같아서, `ping` 직후 바로 외부에서 홈서버로 접속해보았다.

$ nc -zv 192.168.123.110 22
Connection to 192.168.123.110 22 port [tcp/ssh] succeeded!

연결에 성공했다.

 

`ping` 직후에 홈 서버에 연결하면 연결이 성공하였고, `ping`을 한 이후 몇 분 뒤에 시도하면 다시 연결이 실패하였다. 정확히는 모르겠지만, 홈 서버 혹은 라우터 단의 무선 연결이 대기 상태에 있다가 홈 서버에서 외부로의 접속을 시도하면 다시 복구된다고 추정하였다. 언제 해당 증상이 발생하는 지를 모르니 해당 증상을 임의로 발생시킬 수도 없고, 따라서 추가적인 테스트가 불가하여 정확한 원인은 찾을 수가 없었다.

 

무선 연결에서의 대기 문제인가 싶어, LAN선을 사와서 공유기에 홈 서버를 직접 연결하는 방식으로 변경하였다. 유선으로 네트워크를 연결한 이후부터는 해당 문제가 발생하지 않았다. 사실 처음부터 유/무선의 문제인지를 여부에 두고 있긴 하였지만, 노트북을 공유기 옆에 두고 유선으로만 사용하기 싫어서 애써 외면하였다.. 결국 현재는 홈 서버 노트북이 공유기 바로 옆에 위치하게 되었다.

 

문제를 해결하긴 하였지만, 정확한 원인을 찾지 못해 약간은 찜찜한 마음이 남아있다. 무선 네트워크 구성을 잘 아시는 분이 있다면 어떤 것이 원인이었는지 여쭤보고 싶다.

'해결 및 개선' 카테고리의 다른 글

개인 프로젝트 CI/CD 간소화하기  (0) 2025.05.29
우분투가 설치된 삼성 노트북에서 배터리 관리하기 (실패)  (2) 2025.01.26
Github Secrets 하나만으로 모든 환경변수 관리하기  (3) 2025.01.21
[Spring] Swagger Doc 관련 문제 해결하기  (0) 2024.12.30
'해결 및 개선' 카테고리의 다른 글
  • 개인 프로젝트 CI/CD 간소화하기
  • 우분투가 설치된 삼성 노트북에서 배터리 관리하기 (실패)
  • Github Secrets 하나만으로 모든 환경변수 관리하기
  • [Spring] Swagger Doc 관련 문제 해결하기
j30ngwoo
j30ngwoo
  • j30ngwoo
    Jeongwoo Dev Blog
    j30ngwoo
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (16)
      • 정리 및 생각 (4)
      • Problem Solving (2)
      • 해결 및 개선 (5)
      • Projects (3)
  • 인기 글

  • 태그

    오블완
    spring
    티스토리챌린지
    whenwhen
    kupc2023
    backend
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
j30ngwoo
홈 서버 SSH 연결 오류 해결하기
상단으로

티스토리툴바