네트워크 기초

네트워크 기초

1. 네트워크 기본 개념

IP 주소

IPv4: 192.168.1.100
      └─┬─┘ └─┬─┘
     네트워크  호스트

IPv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334

사설 IP 대역

클래스 대역 용도
A 10.0.0.0/8 대규모 네트워크
B 172.16.0.0/12 중규모 네트워크
C 192.168.0.0/16 가정/소규모

서브넷 마스크

IP:      192.168.1.100
서브넷:   255.255.255.0   (/24)
         └──네트워크──┘ └호스트┘

CIDR 표기: 192.168.1.0/24
 256 주소 (192.168.1.0 ~ 192.168.1.255)

주요 포트

포트 서비스
22 SSH
80 HTTP
443 HTTPS
3306 MySQL
5432 PostgreSQL
6379 Redis

2. 네트워크 설정 확인

ip addr - IP 주소 확인

# 모든 인터페이스
ip addr
ip a

# 특정 인터페이스
ip addr show eth0

출력:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::1/64 scope link
       valid_lft forever preferred_lft forever
# 인터페이스 목록
ip link

# 인터페이스 활성화
sudo ip link set eth0 up

# 인터페이스 비활성화
sudo ip link set eth0 down

ip route - 라우팅 테이블

# 라우팅 확인
ip route
ip r

출력:

default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100

ifconfig (레거시)

# 설치 필요할 수 있음
sudo apt install net-tools    # Ubuntu
sudo dnf install net-tools    # CentOS

# 사용
ifconfig
ifconfig eth0

hostname - 호스트명

# 호스트명 확인
hostname
hostname -I    # IP 주소만

# 호스트명 변경 (임시)
sudo hostname new-hostname

# 호스트명 변경 (영구)
sudo hostnamectl set-hostname new-hostname

3. 연결 테스트

ping - 연결 확인

# 기본 ping
ping google.com

# 횟수 지정
ping -c 4 google.com

# 간격 지정
ping -i 0.5 192.168.1.1

traceroute - 경로 추적

# 설치
sudo apt install traceroute    # Ubuntu
sudo dnf install traceroute    # CentOS

# 사용
traceroute google.com
traceroute -n 8.8.8.8    # 이름 해석 안 함

mtr - 통합 도구

# 설치
sudo apt install mtr    # Ubuntu
sudo dnf install mtr    # CentOS

# 사용 (ping + traceroute)
mtr google.com
mtr -r -c 10 google.com    # 보고서 모드

4. DNS 조회

nslookup

# 기본 조회
nslookup google.com

# 특정 DNS 서버 사용
nslookup google.com 8.8.8.8

# 레코드 타입 지정
nslookup -type=MX google.com

dig

# 기본 조회
dig google.com

# 간단한 출력
dig +short google.com

# 특정 레코드
dig google.com MX
dig google.com TXT

# 특정 DNS 서버
dig @8.8.8.8 google.com

# 역방향 조회
dig -x 8.8.8.8

host

# 간단한 조회
host google.com
host -t MX google.com

/etc/hosts

로컬 DNS 설정입니다.

cat /etc/hosts
127.0.0.1   localhost
192.168.1.50   myserver.local myserver

/etc/resolv.conf

DNS 서버 설정입니다.

cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
search example.com

5. 포트 확인

ss - 소켓 통계

# 열린 포트 확인
ss -tuln

# TCP 연결
ss -t

# 리스닝 포트
ss -l

# 프로세스 정보 포함
ss -tulnp

# 특정 포트
ss -tuln | grep :80

옵션: | 옵션 | 설명 | |------|------| | -t | TCP | | -u | UDP | | -l | LISTEN 상태만 | | -n | 숫자로 표시 | | -p | 프로세스 정보 |

netstat (레거시)

# 열린 포트
netstat -tuln

# 모든 연결
netstat -an

# 프로세스 포함
sudo netstat -tulnp

lsof - 열린 파일/포트

# 특정 포트를 사용하는 프로세스
sudo lsof -i :80

# 특정 프로세스의 네트워크 연결
sudo lsof -i -a -p 1234

# 모든 네트워크 연결
sudo lsof -i

6. SSH - 원격 접속

기본 접속

# 기본 접속
ssh user@hostname
ssh user@192.168.1.100

# 포트 지정
ssh -p 2222 user@hostname

# 상세 출력
ssh -v user@hostname

SSH 키 인증

# 1. 키 생성
ssh-keygen -t rsa -b 4096

# 또는 ed25519 (권장)
ssh-keygen -t ed25519

# 2. 공개키 복사
ssh-copy-id user@hostname

# 3. 키로 접속
ssh user@hostname

SSH 키 파일

~/.ssh/
├── id_rsa           # 개인키 (절대 공유 금지)
├── id_rsa.pub       # 공개키 (서버에 등록)
├── authorized_keys  # 허용된 공개키 목록
├── known_hosts      # 접속했던 서버 목록
└── config           # SSH 설정

SSH config 설정

# ~/.ssh/config
Host myserver
    HostName 192.168.1.100
    User ubuntu
    Port 22
    IdentityFile ~/.ssh/id_rsa

Host production
    HostName prod.example.com
    User deploy
    Port 2222

사용:

ssh myserver
ssh production

7. 파일 전송

scp - 파일 복사

# 로컬 → 원격
scp file.txt user@host:/path/to/destination/

# 원격 → 로컬
scp user@host:/path/to/file.txt ./

# 디렉토리 복사
scp -r directory/ user@host:/path/to/

# 포트 지정
scp -P 2222 file.txt user@host:/path/

rsync - 동기화

# 기본 동기화
rsync -av source/ destination/

# 원격 동기화
rsync -av local_dir/ user@host:/remote_dir/
rsync -av user@host:/remote_dir/ local_dir/

# 삭제된 파일도 동기화
rsync -av --delete source/ destination/

# 진행 상황 표시
rsync -av --progress source/ destination/

# 압축 전송
rsync -avz source/ user@host:/destination/

# SSH 포트 지정
rsync -av -e "ssh -p 2222" source/ user@host:/dest/

sftp - 대화형 전송

sftp user@hostname

# sftp 명령어
sftp> ls              # 원격 목록
sftp> lls             # 로컬 목록
sftp> cd /path        # 원격 이동
sftp> lcd /path       # 로컬 이동
sftp> get file.txt    # 다운로드
sftp> put file.txt    # 업로드
sftp> quit            # 종료

8. 네트워크 설정 (영구)

Ubuntu/Debian (Netplan)

# 설정 파일
sudo vi /etc/netplan/01-netcfg.yaml
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
# 적용
sudo netplan apply

CentOS/RHEL (NetworkManager)

# 설정 파일
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
# 적용
sudo systemctl restart NetworkManager
# 또는
sudo nmcli connection reload
sudo nmcli connection up eth0

nmcli (NetworkManager CLI)

# 연결 목록
nmcli connection show

# 장치 상태
nmcli device status

# 고정 IP 설정
sudo nmcli connection modify eth0 ipv4.addresses 192.168.1.100/24
sudo nmcli connection modify eth0 ipv4.gateway 192.168.1.1
sudo nmcli connection modify eth0 ipv4.dns "8.8.8.8 8.8.4.4"
sudo nmcli connection modify eth0 ipv4.method manual
sudo nmcli connection up eth0

# DHCP로 변경
sudo nmcli connection modify eth0 ipv4.method auto
sudo nmcli connection up eth0

9. 실습 예제

실습 1: 네트워크 정보 확인

# IP 주소 확인
ip addr

# 라우팅 테이블
ip route

# DNS 설정
cat /etc/resolv.conf

# 호스트명
hostname -I

실습 2: 연결 테스트

# ping 테스트
ping -c 4 google.com

# DNS 조회
dig +short google.com
nslookup google.com

# 경로 추적
traceroute -n google.com

실습 3: 포트 확인

# 열린 포트 확인
ss -tuln

# 특정 포트 사용 프로세스
sudo lsof -i :22

# 외부에서 포트 테스트
nc -zv localhost 22

실습 4: SSH 키 설정

# 키 생성
ssh-keygen -t ed25519 -C "your_email@example.com"

# 키 확인
ls -la ~/.ssh/

# 공개키 내용 확인
cat ~/.ssh/id_ed25519.pub

실습 5: 파일 전송

# 로컬 파일 복사 테스트
mkdir -p ~/test_sync/source ~/test_sync/dest
echo "test content" > ~/test_sync/source/test.txt

# rsync 동기화
rsync -av ~/test_sync/source/ ~/test_sync/dest/

# 결과 확인
ls -la ~/test_sync/dest/

다음 단계

11_System_Monitoring.md에서 시스템 모니터링을 배워봅시다!

to navigate between lessons