Categories
Computer Network

우분투에서 iptables 명령으로 인터넷 연결 공유하기

인터넷 연결 공유를 위해서는 게이트웨이 역할을 할 리눅스 컴퓨터가 하나 필요하다. 이 컴퓨터에는 랜카드가 2개 설치되어야 한다. 하나는 퍼블릭 IP 주소를 갖게 되고 다른 하나는 사설 IP 주소를 갖게 된다. 이 컴퓨터를 게이트웨이 서버라고 부르도록 하자.

게이트웨이 서버에서의 설정 방법을 알아보자.

인터넷 연결 공유를 위해서는 게이트웨이에서 IP 포워딩이 활성화되어야 한다.

sudo sysctl -w net.ipv4.ip_forward=1

이 명령에 의해서 IP 포워딩이 활성화될 것이다. 하지만 그 효과는 시스템을 재부팅하면 사라지게 된다.

이러한 문제를 해결하기 위해 /etc/sysctl.conf 파일을 수정한다.

sudo vi /etc/sysctl.conf

파일에서 아래와 같이 된 부분을 찾는다.

# net.ipv4.ip_forward = 0

이 부분을 아래와 같이 고친다.

net.ipv4.ip_forward = 1

인터넷 연결 공유는 NAT 설정을 통해 이루어진다. 우분투에서 NAT 설정을 하는 명령은 iptables 이다.

iptables 명령으로 FILTER 테이블과 NAT 테이블을 설정하는 방법을 알아보자.

FILTER 테이블의 모든 체인을 비운다.

sudo iptables -F

NAT 테이블의 모든 체인을 비운다.

sudo iptables -t nat -F

NAT 테이블에서 IP 매스커레이딩을 활성화한다.

iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE

여기서 enp3s0 은 퍼블릭 IP 주소를 갖는 랜카드의 인터페이스 이름이다. 독자는 자신의 네트워크 환경에 맞게 수정해서 입력해야 한다.

랜카드의 인터페이스 이름은 아래 명령으로 확인할 수 있다.

ip addr show

이상으로 게이트웨이에서의 설정을 마쳤다. 하지만 이런 식으로 여러 명령들을 매번 입력하는 것은 번거로운 일이다. 명령들을 하나의 스크립트 파일 안에 정리해 보자.

sudo vi /usr/local/bin/ics.sh

아래와 같은 내용을 입력하고 저장한다.

#!/bin/bash
sysctl -w net.ipv4.ip_forward=1
iptables -F
iptables -t nat -F
iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE

모든 사용자가 이 파일을 실행할 수 있도록 한다.

sudo chmod a+x /usr/local/bin/ics.sh

시스템 부팅 후 아래 명령을 내리면 인터넷 연결 공유 기능이 활성화될 것이다.

sudo /usr/local/bin/ics.sh

이렇게 하는 것마저 귀찮다면 /etc/rc.local 파일을 이용하면 된다. ‘exit 0’ 부분을 찾아 그 앞에 아래 내용을 추가한다.

/usr/local/bin/ics.sh

그러면 시스템을 부팅할 때마다 해당 스크립트가 자동으로 실행될 것이다.

클라이언트 컴퓨터에서의 설정 방법을 알아보자.

인터넷에 직접 연결되어 있지 않은 다른 컴퓨터들은 게이트웨이 서버를 통해 인터넷에 연결하게 된다. 따라서 해당 컴퓨터들은 네트워크 설정을 할 때 2가지만 정확하게 입력하면 된다.

하나는 기본 게이트웨이의 주소이고 다른 하나는 DNS 서버의 주소이다.

기본 게이트웨이의 주소는 앞에서 설명한 게이트웨이 서버의 사설 IP 주소를 입력한다. 퍼블릭 IP 주소가 아니라는 점에 유의하자.

DNS 서버의 주소는 인터넷 서비스 제공 업체가 제공하는 DNS 서버의 주소를 입력한다. 구글의 퍼블릭 DNS 서버 주소 (8.8.8.8) 를 입력해도 된다.

Leave a Reply

Your email address will not be published. Required fields are marked *