Linux를 라우터로 사용하는 방법

Linux를 라우터로 사용하는 방법입니다. IP forwarding, static route, firewalld zone, NAT와 routing 차이, ip route get과 tcpdump 검증을 정리했습니다.

Linux를 라우터로 사용하는 방법: IP forwarding과 static route

Linux는 적절히 설정하면 일반 서버가 아니라 라우터처럼 동작할 수 있다. 핵심은 두 가지다. 첫째, Linux kernel이 interface 간 packet을 전달하도록 IP forwarding을 켠다. 둘째, 각 network가 목적지 대역을 어느 gateway로 보내야 하는지 routing table에 등록한다.

설명의 VMware NAT lab 맥락을 유지하되, NAT까지 포함한 전체 구축보다 Linux router 동작 원리와 최소 구성에 집중한다.

라우터가 되기 위한 조건

  • 서로 다른 network에 연결된 NIC가 2개 이상 있어야 한다.
  • 각 NIC에 해당 대역의 IP가 설정되어 있어야 한다.
  • net.ipv4.ip_forward가 켜져 있어야 한다.
  • client와 upstream 장비에 필요한 static route가 있어야 한다.
  • firewalld 또는 nftables가 forwarding traffic을 막지 않아야 한다.

예시 구조

구분IP
Router Linux WAN192.168.11.254/24
Router Linux LAN192.168.12.254/24
외부쪽 client192.168.11.205/24
내부쪽 client192.168.12.11/24

1. interface 확인

ip -br link
ip -br addr
nmcli dev status
ip route

2. Router Linux IP 설정

WAN_CON="System ens32"
LAN_CON="System ens34"

sudo nmcli con mod "${WAN_CON}" ipv4.method manual ipv4.addresses 192.168.11.254/24
sudo nmcli con mod "${LAN_CON}" ipv4.method manual ipv4.addresses 192.168.12.254/24

sudo nmcli con up "${WAN_CON}"
sudo nmcli con up "${LAN_CON}"

ip -br addr

3. IP forwarding 켜기

sudo sysctl -w net.ipv4.ip_forward=1

cat <<'EOF' | sudo tee /etc/sysctl.d/90-ip-forward.conf
net.ipv4.ip_forward = 1
EOF

sudo sysctl --system
sysctl net.ipv4.ip_forward

4. firewalld forwarding 허용

단순 lab에서는 방화벽을 끄는 예시가 많지만, 현재 기준으로는 zone을 지정하고 필요한 forwarding을 확인하는 편이 낫다.

sudo systemctl enable --now firewalld
sudo firewall-cmd --zone=trusted --change-interface=ens34 --permanent
sudo firewall-cmd --zone=internal --change-interface=ens32 --permanent
sudo firewall-cmd --reload

firewall-cmd --get-active-zones
firewall-cmd --list-all-zones | sed -n '1,120p'

5. client static route

외부쪽 client가 내부 대역 192.168.12.0/24를 Router Linux로 보내도록 route를 추가한다.

sudo ip route add 192.168.12.0/24 via 192.168.11.254
ip route get 192.168.12.11

내부쪽 client는 외부쪽 대역을 Router Linux로 보낸다.

sudo ip route add 192.168.11.0/24 via 192.168.12.254
ip route get 192.168.11.205

6. Windows route 예시

route print
route add 192.168.12.0 mask 255.255.255.0 192.168.11.254
tracert 192.168.12.11

7. 테스트

ping -c 3 192.168.12.11
traceroute 192.168.12.11

sudo tcpdump -ni ens32 host 192.168.11.205
sudo tcpdump -ni ens34 host 192.168.12.11

NAT와 routing의 차이

routing은 목적지 대역으로 packet을 전달하는 일이고, NAT는 packet의 source 또는 destination 주소를 바꾸는 일이다. 두 내부 대역이 서로 route를 알고 있으면 NAT 없이도 통신할 수 있다. 외부 인터넷으로 나가거나 upstream이 내부 대역 route를 모를 때는 masquerade 같은 NAT가 필요할 수 있다.

마무리

Linux를 라우터로 쓰려면 NIC 설정, IP forwarding, routing table, firewall forwarding을 함께 봐야 한다. ping만 성공 여부를 보는 것보다 ip route gettcpdump로 packet이 실제 어떤 interface를 지나가는지 확인하면 구조를 훨씬 정확히 이해할 수 있다.

문서 링크

BGM EVER