Skip to main content
Summary

네트워크를 볼 때는 주소, 길, 문을 나누어 봅니다

네트워크 문제는 한꺼번에 보면 복잡합니다. 대신 건물 방문에 비유하면 단순해집니다. 먼저 내 주소가 있는지 확인합니다. 그다음 목적지까지 가는 길이 있는지 봅니다. 마지막으로 상대 건물의 문이 열려 있는지 확인합니다.

Linux에서는 이 흐름을 다음 명령으로 점검합니다.

  • 내 주소 확인: ip addr

  • 나가는 길 확인: ip route

  • 목적지 응답 확인: ping

  • 중간 경로 확인: traceroute

  • 열린 포트 확인: ss, lsof

  • 웹 응답 확인: curl, wget

  • 원격 접속: ssh

실습은 먼저 자신의 컴퓨터에서 확인한 뒤, 원격 서버가 있다면 같은 명령을 서버에서도 실행해 보세요.

네트워크 확인과 원격 접속AI 생성 이미지

IP 주소와 라우팅 확인하기

현재 시스템의 네트워크 주소는 ip addr로 확인합니다.

ip addr

출력에는 여러 네트워크 인터페이스가 보입니다. 인터페이스는 네트워크 카드나 가상 네트워크 장치라고 생각하면 됩니다. 자주 보는 이름은 lo, eth0, ens33, wlan0 같은 형태입니다.

lo는 자기 자신을 가리키는 루프백 인터페이스입니다. 여기에 있는 127.0.0.1은 내 컴퓨터 안에서만 쓰는 주소입니다. 실제 외부 통신에 쓰는 주소는 보통 eth0, ens33, wlan0 같은 인터페이스 아래의 inet 항목에서 확인합니다.

예를 들어 다음과 같은 줄이 있다면:

inet 192.168.1.25/24

이 시스템의 IPv4 주소는 192.168.1.25이고, /24는 같은 네트워크 범위를 나타내는 표기입니다. 초보 단계에서는 /24가 보통 192.168.1.x 대역을 뜻한다고 이해하면 충분합니다.

주소가 있어도 밖으로 나가는 길이 없으면 인터넷이나 다른 서버에 접속할 수 없습니다. 기본 경로는 ip route로 확인합니다.

ip route

중요한 줄은 보통 default로 시작합니다.

default via 192.168.1.1 dev wlan0

이 뜻은 "목적지를 자세히 모르는 외부 통신은 wlan0 인터페이스를 통해 192.168.1.1 게이트웨이로 보낸다"는 의미입니다. 게이트웨이는 집이나 회사 네트워크에서 바깥으로 나가는 문 역할을 합니다.

네트워크가 안 될 때는 먼저 이 순서로 확인하세요.

ip addr
ip route

IP 주소가 없다면 네트워크 연결 자체나 DHCP 설정 문제일 수 있습니다. default 경로가 없다면 같은 내부망에는 접속되어도 외부 인터넷으로 나가지 못할 수 있습니다.

ping과 traceroute로 연결성 확인하기

ping은 상대가 네트워크에서 응답하는지 확인하는 가장 기본적인 도구입니다.

ping -c 4 8.8.8.8

-c 4는 4번만 보내고 멈추라는 뜻입니다. 옵션을 주지 않으면 계속 실행되므로 Ctrl+C로 중단해야 합니다.

응답이 오면 다음처럼 시간이 표시됩니다.

64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=22.4 ms

여기서 time은 왕복 시간입니다. 값이 작을수록 응답이 빠릅니다. packet loss가 높다면 중간 네트워크가 불안정하거나 상대가 응답을 막고 있을 수 있습니다.

IP 주소로는 되는데 도메인 이름으로 안 된다면 DNS 문제일 수 있습니다.

ping -c 4 google.com

8.8.8.8은 응답하는데 google.com이 해석되지 않으면, 네트워크 자체보다 이름 해석 설정을 의심해야 합니다.

목적지까지 어느 경로를 지나가는지 보려면 traceroute를 사용합니다.

traceroute google.com

Ubuntu 계열에서 명령이 없다면 설치합니다.

sudo apt update
sudo apt install traceroute

Fedora/RHEL 계열은 다음과 같습니다.

sudo dnf install traceroute

Arch 계열은 다음과 같습니다.

sudo pacman -S traceroute

traceroute 출력에서 * * *가 보인다고 항상 장애는 아닙니다. 중간 장비가 응답을 막을 수도 있습니다. 끝 목적지까지 도달하는지, 어느 구간부터 계속 끊기는지를 보고 판단합니다.

열린 포트와 프로세스 찾기

서버에서 "서비스가 실행 중인데 접속이 안 된다"는 문제는 자주 생깁니다. 이때는 포트를 확인해야 합니다. 포트는 건물의 문 번호와 같습니다. 웹 서버는 보통 80 또는 443, SSH 서버는 보통 22번 포트를 사용합니다.

현재 열린 포트는 ss로 확인합니다.

ss -tuln

옵션의 의미는 다음과 같습니다.

  • -t: TCP 보기

  • -u: UDP 보기

  • -l: 듣고 있는 포트만 보기

  • -n: 포트와 주소를 숫자로 표시

어떤 프로세스가 포트를 열었는지 보려면 관리자 권한을 붙입니다.

sudo ss -tulnp

출력에서 주소도 중요합니다.

LISTEN 0 128 127.0.0.1:8080 0.0.0.0:* users:(("python",pid=1234,fd=3))

127.0.0.1:8080은 내 컴퓨터 안에서만 접속할 수 있다는 뜻입니다. 외부에서 접속하려면 서비스가 0.0.0.0:8080 또는 서버의 실제 IP 주소에 바인딩되어 있어야 합니다. 반대로 보안상 외부에 열 필요가 없는 관리 도구는 127.0.0.1에만 묶는 것이 안전합니다.

특정 포트를 누가 쓰는지 찾을 때는 lsof가 편합니다.

sudo lsof -i :22

COMMAND, PID, USER를 보면 어떤 프로그램이 해당 포트를 사용 중인지 알 수 있습니다. 이후 프로세스를 종료해야 한다면 프로세스와 작업 제어 장에서 배운 것처럼 먼저 PID와 명령을 확인하고, 바로 kill -9부터 사용하지 않습니다.

curl과 wget으로 웹 응답 확인하기

브라우저가 없어도 터미널에서 웹 요청을 보낼 수 있습니다. 서버의 응답 상태를 확인할 때는 curl이 유용합니다.

curl -I https://example.com

-I는 본문을 내려받지 않고 응답 헤더만 확인합니다. 여기서 가장 먼저 볼 값은 상태 코드입니다.

HTTP/2 200

200은 정상 응답입니다. 301, 302는 다른 주소로 이동하라는 뜻이고, 403은 권한 거부, 404는 없음, 500대는 서버 내부 오류로 이해하면 됩니다.

리다이렉션을 따라가려면 -L을 사용합니다.

curl -L https://example.com

상태 코드만 간단히 보고 싶다면 다음처럼 실행합니다.

curl -s -o /dev/null -w "%{http_code}n" https://example.com

파일 다운로드에는 curl과 wget을 모두 쓸 수 있습니다.

curl -L -o file.tar.gz https://example.com/file.tar.gz
wget -O file.tar.gz https://example.com/file.tar.gz

-o와 -O는 대소문자가 다르므로 주의합니다. curl -o는 저장할 파일 이름을 지정합니다. wget -O도 저장할 파일 이름을 지정합니다. 큰 파일을 받다가 끊겼다면 wget -c로 이어받기를 시도할 수 있습니다.

wget -c https://example.com/big.iso

다운로드한 파일을 바로 실행하지 마세요. 출처를 확인하고, 가능하다면 체크섬이나 서명 확인 절차를 거친 뒤 사용합니다.

SSH로 원격 서버 접속하기

Linux가 실무 인프라 도구가 되는 순간은 원격 서버를 다룰 때입니다. SSH는 암호화된 통로로 서버에 접속하는 표준적인 방법입니다.

기본 접속 형식은 다음과 같습니다.

ssh 사용자명@서버주소

예를 들어 서버 IP가 203.0.113.10, 사용자명이 ubuntu라면 다음처럼 접속합니다.

ssh [email protected]

포트가 22번이 아니라면 -p를 사용합니다.

ssh -p 2222 [email protected]

처음 접속하면 서버의 지문(fingerprint)을 신뢰할 것인지 묻습니다. 이 질문은 "내가 접속하려는 서버가 정말 그 서버인가?"를 확인하는 단계입니다. 회사 서버나 클라우드 서버라면 관리 화면이나 관리자에게 지문을 확인하는 것이 가장 안전합니다. 무조건 yes를 입력하는 습관은 피합니다.

접속을 종료하려면 원격 셸에서 다음을 입력합니다.

exit

또는 Ctrl+D를 누를 수 있습니다.

SSH 클라이언트가 없다면 설치합니다.

sudo apt update
sudo apt install openssh-client

Fedora/RHEL 계열:

sudo dnf install openssh-clients

Arch 계열:

sudo pacman -S openssh

서버로 접속을 받으려면 원격 서버 쪽에 SSH 서버가 필요합니다. Ubuntu 계열에서는 보통 다음 패키지를 설치합니다.

sudo apt install openssh-server
sudo systemctl enable --now ssh

Fedora/RHEL 계열에서는 서비스 이름이 보통 sshd입니다.

sudo dnf install openssh-server
sudo systemctl enable --now sshd

Arch 계열도 sshd 서비스를 사용합니다.

sudo pacman -S openssh
sudo systemctl enable --now sshd

scp, sftp, rsync로 파일 전송하기

작은 파일을 빠르게 복사할 때는 scp를 사용할 수 있습니다.

로컬 파일을 서버로 보냅니다.

scp ./report.txt [email protected]:/home/ubuntu/

서버 파일을 로컬로 가져옵니다.

scp [email protected]:/var/log/syslog ./syslog.copy

디렉터리를 복사하려면 -r이 필요합니다.

scp -r ./project [email protected]:/home/ubuntu/

대화형으로 파일을 주고받고 싶다면 sftp를 사용합니다.

sftp [email protected]

접속 후 자주 쓰는 명령은 다음과 같습니다.

pwd      # 원격 현재 위치
lpwd     # 로컬 현재 위치
ls       # 원격 목록
lls      # 로컬 목록
put a.txt
get b.txt
exit

디렉터리 동기화에는 rsync가 강력합니다. 변경된 부분만 전송할 수 있어 반복 백업에 적합합니다.

먼저 실제 전송 없이 무엇이 바뀔지 확인합니다.

rsync -avh --dry-run ./project/ [email protected]:/home/ubuntu/project/

문제가 없으면 --dry-run을 빼고 실행합니다.

rsync -avh ./project/ [email protected]:/home/ubuntu/project/

여기서 ./project/처럼 끝에 /가 있으면 디렉터리 자체가 아니라 그 안의 내용을 보냅니다. 반대로 ./project처럼 /가 없으면 project 디렉터리 자체가 대상 안에 만들어질 수 있습니다. 백업과 배포에서 이 차이는 중요합니다.

--delete 옵션은 원본에 없는 파일을 대상에서도 삭제합니다. 매우 유용하지만 위험합니다. 반드시 --dry-run으로 삭제될 목록을 먼저 확인한 뒤 사용합니다.

SSH 키로 안전하게 로그인하기

비밀번호 로그인은 편하지만, 약한 비밀번호나 반복 공격에 취약합니다. SSH 키는 공개키와 개인키 한 쌍을 사용합니다. 공개키는 서버에 등록하고, 개인키는 내 컴퓨터에 안전하게 보관합니다. 자물쇠는 서버에 두고 열쇠는 내가 가진다고 생각하면 됩니다.

키를 만듭니다.

ssh-keygen -t ed25519 -C "my-laptop"

저장 위치를 묻는 질문은 특별한 이유가 없으면 기본값인 ~/.ssh/id_ed25519를 사용합니다. 암호문(passphrase)을 설정하면 개인키 파일이 유출되더라도 바로 악용되기 어렵습니다.

공개키를 서버에 등록하는 가장 쉬운 방법은 ssh-copy-id입니다.

ssh-copy-id [email protected]

등록 후 키로 접속되는지 확인합니다.

ssh [email protected]

수동으로 등록해야 한다면 로컬의 공개키 내용을 확인합니다.

cat ~/.ssh/id_ed25519.pub

그 내용을 서버의 다음 파일에 한 줄로 추가합니다.

~/.ssh/authorized_keys

서버에서 권한도 확인합니다.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

개인키 파일인 ~/.ssh/id_ed25519는 절대 다른 사람에게 보내지 않습니다. 공개키인 ~/.ssh/id_ed25519.pub만 서버에 등록합니다.

키 로그인이 정상 동작하면 비밀번호 로그인을 제한할 수 있습니다. 단, 원격 서버의 SSH 설정을 바꿀 때는 절대 기존 접속 창을 닫지 마세요. 새 터미널에서 추가 접속이 되는지 확인한 뒤 기존 창을 닫아야 합니다. 설정을 잘못 바꾸면 서버에 다시 들어가지 못할 수 있습니다.

설정 파일을 백업합니다.

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

파일을 엽니다.

sudo nano /etc/ssh/sshd_config

다음 항목을 확인하거나 추가합니다.

PasswordAuthentication no
PubkeyAuthentication yes

설정 문법을 검사합니다.

sudo sshd -t

오류가 없을 때만 서비스를 다시 읽어 들입니다.

sudo systemctl reload ssh

배포판에 따라 서비스 이름이 sshd일 수 있습니다.

sudo systemctl reload sshd

그다음 새 터미널에서 접속을 시험합니다.

ssh [email protected]

새 접속이 성공하면 변경이 안전하게 적용된 것입니다.

짧은 실습 과제

  1. 현재 시스템의 IP 주소와 기본 게이트웨이를 확인합니다.

ip addr
ip route
  1. 외부 IP와 도메인 이름에 각각 ping을 보내 결과 차이를 봅니다.

ping -c 4 8.8.8.8
ping -c 4 google.com
  1. 현재 열린 포트를 확인하고, SSH 포트가 열려 있다면 어떤 프로세스인지 찾습니다.

sudo ss -tulnp
sudo lsof -i :22
  1. 웹 서버의 응답 코드만 확인합니다.

curl -s -o /dev/null -w "%{http_code}n" https://example.com
  1. 원격 서버가 있다면 SSH 키를 만들고, ssh-copy-id로 등록한 뒤 키 로그인으로 접속합니다.

문제 해결 시나리오: 서버에 접속이 안 될 때

SSH 접속이 안 될 때는 추측으로 설정 파일부터 고치지 말고 바깥에서 안쪽으로 좁힙니다.

먼저 내 컴퓨터의 네트워크를 확인합니다.

ip addr
ip route
ping -c 4 8.8.8.8

인터넷이 된다면 서버가 응답하는지 확인합니다.

ping -c 4 203.0.113.10

ping이 막혀도 SSH가 열려 있을 수 있으므로 포트 접속을 확인합니다.

ssh -v [email protected]

-v는 접속 과정을 자세히 보여 줍니다. 인증에서 실패하는지, 네트워크 연결 자체가 안 되는지 구분할 수 있습니다.

서버에 다른 방법으로 접속할 수 있다면 서버 안에서 SSH 포트를 확인합니다.

sudo ss -tulnp | grep ':22'
sudo systemctl status ssh

서비스 이름이 다르면 다음을 사용합니다.

sudo systemctl status sshd

포트가 열려 있지 않다면 SSH 서버가 꺼져 있거나 설정 오류가 있을 수 있습니다. 설정을 바꾼 직후라면 백업 파일과 sshd -t 검사 결과를 먼저 확인합니다. 네트워크 문제 해결의 핵심은 명령을 많이 아는 것이 아니라, 주소, 길, 포트, 인증을 순서대로 확인하는 것입니다.

책 목록

처음부터 실전까지, 터미널이 두렵지 않은 Linux 활용법

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기