[Linux] IP 포워딩(IP Forwarding), 왜 설정해야 합니까?

🚦 IP 포워딩, 대체 무엇이고 왜 필요한가요?

쉽게 비유하면, 리눅스 서버를 교통경찰(👮‍♂️)로 만드는 겁니다.


리눅스 서버는 기본적으로 자신에게 온 패킷만 처리합니다.

즉, 목적지 IP 주소가 자기 자신이 아니면 그냥 버려버린다는 뜻이죠.


하지만 IP 포워딩을 활성화하면 이야기는 달라집니다.


서버에 네트워크 인터페이스(랜카드)가 두 개 이상 있을 때,

한쪽 인터페이스로 들어온 패킷의 목적지가 자신이 아니라 다른 네트워크 대역이라면? IP 포워딩이 켜진 서버는 그 패킷을 버리지 않습니다.


버리자 않고 어떻게 한다? “아 이 패킷은 저쪽 네트워크로 가야 하는구나! 하고 올바른 경로로 전달(Forwarding)해 줍니다.


image


이 기능이 필요한 대표적인 경우는 다음과 같습니다.

라우터(Router) 및 게이트웨이(Gateway) 구축

예를 들어, 인터넷에 연결된 랜카드(eth0)와 내부 사설망에 연결된 랜카드(eth1)를 가진 리눅스 서버가 있다고 가정해 봅시다.

내부망의 컴퓨터들이 인터넷에 접속하려면, 이 리눅스 서버가 중간에서 패킷을 전달해줘야만 합니다. 이때 IP 포워딩은 필수입니다.


VPN 서버 운영

L2TP/IPSec, OpenVPN, WireGuard 같은 VPN 서버는 외부에서 접속한 클라이언트의 트래픽을 내부망이나 인터넷으로 전달해주는 역할을 합니다. 이 과정에서 반드시 IP 포워딩이 필요합니다.


방화벽(Firewall) 및 NAT(Network Address Translation)

리눅스를 방화벽으로 사용할 때, 단순히 패킷을 차단/허용하는 것뿐만 아니라 특정 규칙에 따라 패킷을 다른 곳으로 전달해야 하는 경우가 많습니다.

특히 여러 대의 사설 IP를 하나의 공인 IP로 바꿔주는 NAT 환경에서는 IP 포워딩이 핵심적인 역할을 합니다.


컨테이너 및 가상화 (Docker, KVM)

도커(Docker) 컨테이너나 가상머신(VM)이 외부와 통신해야 할 때, 호스트 운영체제인 리눅스는 이들의 트래픽을 물리 네트워크로 전달해주는 역할을 합니다. 이 역시 IP 포워딩의 일종이라고 볼 수 있습니다.


⚙️ sysctl과 /etc/sysctl.d/ 파헤치기

IP 포워딩을 포함한 리눅스의 수많은 커널 동작 방식은 커널 파라미터(Kernel Parameters) 를 통해 제어됩니다.

그리고 이 파라미터를 확인하고 실시간으로 변경하는 명령어가 바로 sysctl입니다.


하지만 sysctl 명령어로 변경한 설정은 재부팅하면 사라지는 일회성 설정입니다.

설정을 영구적으로 유지하려면 어떻게 해야 할까요? 바로 설정 파일에 기록해두는 것입니다.


과거에는 모든 설정을 /etc/sysctl.conf라는 단일 파일에 기록했습니다. 하지만 요즘 시스템들은 /etc/sysctl.d/ 디렉토리를 사용하는 것을 권장합니다.


/etc/sysctl.d/ 디렉터리는 어떻게 작동할까요?

이 디렉터리의 작동 방식은 아주 간단하고 효율적입니다.


  • 모듈화된 설정: 시스템 부팅 시 또는 sysctl 적용 명령 시, 시스템은 /etc/sysctl.conf 파일과 함께 /etc/sysctl.d/ 디렉터리 안에 있는 모든 .conf 파일을 읽어들입니다.
  • 이름 순서대로 적용: 파일들은 이름 순서(알파벳, 숫자 순)대로 로드됩니다. 예를 들어 10-network.conf99-custom.conf보다 먼저 적용됩니다.
  • 덮어쓰기(Override): 만약 여러 파일에 동일한 설정이 있다면, 나중에 읽힌 파일의 설정이 이전에 읽힌 설정을 덮어씁니다. 예를 들어, 10-network.confnet.ipv4.ip_forward = 0이 있고 99-custom.confnet.ipv4.ip_forward = 1이 있다면, 최종적으로는 1이 적용됩니다.

이러한 방식 덕분에 우리는 기본 시스템 설정을 건드리지 않고, 99-my-settings.conf 와 같은 파일을 만들어 원하는 설정을 추가하거나 덮어쓸 수 있습니다.

패키지를 설치할 때도 해당 패키지에 필요한 커널 설정이 50-docker.conf와 같은 파일로 깔끔하게 추가될 수 있어 관리가 매우 용이합니다.


🛠️ IP 포워딩 활성화 및 상태 확인하기

1단계: 현재 IP 포워딩 상태 확인하기

먼저 현재 설정값이 무엇인지 확인합니다. 0은 비활성화, 1은 활성화 상태를 의미합니다.

# sysctl 명령어로 확인
sysctl net.ipv4.ip_forward

# /proc 파일시스템을 직접 읽어서 확인
cat /proc/sys/net/ipv4/ip_forward

2단계: IP 포워딩 영구적으로 활성화하기

재부팅 후에도 설정이 유지되도록 /etc/sysctl.d/ 디렉터리에 설정 파일을 만들어 보겠습니다.

파일 이름 앞의 99는 다른 기본 설정들보다 나중에 적용되도록 하기 위한 관례입니다.

# 텍스트 편집기(nano, vim 등)로 새 설정 파일을 엽니다.
sudo nano /etc/sysctl.d/99-custom-forwarding.conf

파일 안에 다음 내용을 한 줄 추가하고 저장합니다.

net.ipv4.ip_forward = 1

3단계: 변경된 설정 즉시 적용하기

방금 만든 설정 파일을 시스템에 바로 적용하려면 다음 명령어를 사용합니다. 재부팅할 필요가 없습니다.

# 시스템의 모든 .conf 파일을 다시 읽어 적용 (권장 방식)
sudo sysctl --system

# 또는 아래 명령어도 동일한 역할을 합니다.
# sudo sysctl -p

관련 글

지식 공유3분 읽기

[Linux] Ubuntu 24.04 -> Rocky 10 마이그레이션

개요 기존 홈서버에서 운영 중인 Ubuntu 24.04 서버의 모든 서비스( Docker , Gatsby , 데이터 등등)를 새로운 Rocky 서버로 누락 없이 이관하기 위한 과정을 기록해보려고 합니다. 사전 준비 작업 전에, 양쪽...

리눅스
지식 공유3분 읽기

[Linux] 테스트 서버 디스크 장애 이슈

개요 OS : Rocky 8.10 디스크 구성 /dev/sda : 메인 디스크 /dev/sdb : 백업 디스크 상황 평소에 서버 로그에 READ sda .... , swap 관련 메시지가 간간히 보였음. 어느 날 I/O 관련 로그가...

리눅스
지식 공유1분 읽기

[Linux] SSH Keygen으로 원격 접속 키 생성하기

SSH Key 인증? SSH Key 인증은 비대칭 암호화라는 방식을 사용합니다. 한 쌍의 키(Key Pair)를 생성하여 하나는 내가 가지고 있고(개인 키, Private Key), 하나는 서버에 등록(공개 키, Public Key)...

리눅스