Categories
Computer Network

hostapd: PC를 무선 공유기로 만드는 방법

무선 랜카드를 이용해서 PC 를 무선 공유기로 사용하는 방법을 알아보자.

1. 무선 랜카드의 AP 모드 지원 여부 확인

무선 랜카드가 AP 모드를 지원하는지 확인한다.

iw list | grep “Supported interface modes” -A 10

출력 결과에 AP 가 표시되면 무선 랜카드가 AP 모드를 지원하는 것이다. 그렇지 않다면 무선 랜카드를 다른 제품으로 교체해야 작업을 계속할 수 있다.

2. 네트워크 인터페이스 구성

네트워크 인터페이스를 구성하자.

Netplan 구성 파일을 연다.

sudo vi /etc/netplan/00-installer-config.yaml

아래와 같은 내용으로 파일을 작성한다.

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:    # 인터넷에 연결된 유선 랜카드.
      dhcp4: true
    wlan0:    # 무선 랜카드
      dhcp4: false
      addresses:
      - 192.168.0.101/24    # 고정 IP 주소를 부여한다.

파일을 저장하고 편집기를 닫는다.

변경한 내용을 시스템에 적용한다.

sudo netplan apply

3. 인터넷 연결 공유 설정하기

인터넷 연결 공유 설정을 한다.

IP 포워딩을 활성화한다.

sudo sysctl -w net.ipv4.ip_forward=1

아래와 같은 iptables 명령으로 FILTER 테이블과 NAT 테이블을 구성한다.

# FILTER 테이블의 모든 체인을 초기화한다.
sudo iptables -F

# NAT 테이블의 모든 체인을 초기화한다.
sudo iptables -t nat -F

# NAT 테이블에 IP 매스커레이딩을 적용한다.
iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE

4. DHCP 서버 설정하기

DHCP 서버 구성 파일을 연다.

sudo vi /etc/dhcp/dhcpd.conf

아래와 같은 내용으로 파일을 작성한다.

default-lease-time 600;
max-lease-time 7200;

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.201 192.168.0.220;
  option routers 192.168.0.101;    # 게이트웨이 주소. 무선 랜카드의 IP 주소이다.
  option domain-name-servers 8.8.8.8, 8.8.4.4;
}

DHCP 서버가 무선 랜카드를 통해 클라이언트의 요청에 응답하도록 한다.

/etc/default/isc-dhcp-server 파일을 열고 아래와 같이 작성한다.

INTERFACESv4="wlan0"    # 무선 랜카드의 인터페이스 이름이다.
INTERFACESv6=""

변경한 내용를 시스템에 적용한다.

sudo systemctl restart isc-dhcp-server

5. hostapd 의 설치와 구성

hostapd 는 액세스 포인트와 인증 서버를 위한 데몬 프로그램이다.

hostapd 패키지를 설치한다.

apt install hostapd

hostapd 의 구성 파일을 만든다.

vi ~/hostapd/hostapd.conf

구성 파일에 아래와 같은 내용을 입력한다.

Wi-Fi 인터페이스를 지정한다.

interface=wlan0

무선 랜카드 드라이버를 지정한다. 대부분의 경우에 nl80211 이면 된다.

driver=nl80211

공유기의 SSID 를 지정한다.

ssid=xtmci

Wi-Fi 인증 방식을 지정한다. 1은 WPA 방식이고 2는 WPA2 방식이다. 3은 2가지 방식을 모두 사용한다는 의미이다.

wpa=2

공유기 암호를 지정한다.

wpa_passphrase=pass1234

암호화 방식을 지정한다.

wpa_key_mgmt=WPA-PSK

인증 방식이 WPA 인 경우에 사용할 암호화 프로토콜을 지정한다.

wpa_pairwise=TKIP

인증 방식이 WPA2 인 경우에 사용할 암호화 프로토콜을 지정한다.

rsn_pairwise=CCMP

Wi-Fi 채널을 지정한다.

channel=6

Wi-Fi 모드를 지정한다. a, b, g, n 중 하나를 지정하면 된다.

hw_mode=g

MAC 주소 필터링 방식을 지정한다.

macaddr_acl=0

인증 알고리즘을 지정한다. 1은 오픈 시스템 인증 방식을 가리킨다. 2는 오픈 시스템 인증 방식과 공유키 인증 방식을 모두 사용한다는 의미이다.

auth_algs=1

SSID 를 공개할 것인지 여부를 지정한다. 0으로 하면 공개하게 되고 1로 하면 공개하지 않게 된다.

ignore_broadcast_ssid=0

완성된 ~/hostapd/hostapd.conf 파일의 내용은 다음과 같다.

interface=wlan0
driver=nl80211
ssid=xtmci
wpa=2
wpa_passphrase=pass1234
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
channel=6
hw_mode=g
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0

hostapd 를 실행한다.

sudo hostapd -B ~/hostapd/hostapd.conf

-B 옵션은 백그라운드 상태에서 실행한다는 의미이다.

6. 테스트

PC와 무선 랜카드를 이용한 무선 공유기가 완성되었다. 스마트폰 등 모바일 기기에서 무선 공유기에 접속해 보자. 접속 방법은 일반 공유기에 접속할 때와 같다. 네트워크 이름 (SSID) 을 찾아 선택한 후 암호를 입력하면 된다.

Categories
Computer Network

리눅스 DHCP 서버의 설치 및 설정 방법

아래 명령으로 DHCP 서버를 설치한다.

sudo apt install isc-dhcp-server

DHCP 서버의 설정 파일은 /etc/dhcp/dhcpd.conf 이다. 이 파일을 백업한다.

sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak

같은 이름으로 새로운 설정 파일을 만든다.

sudo vi /etc/dhcp/dhcpd.conf

아래와 같은 내용을 입력한다. 해시 표시 (#) 뒤에 있는 설명 부분은 입력하지 않아도 된다.

# IP 주소 임대 시간은 600초이다.
default-lease-time 600;
# 최대 IP 주소 임대 시간은 2시간이다.
max-lease-time 7200;
# 해당 DHCP 서버가 공식적인 서버임을 의미한다.
authoritative;

# 서브넷을 정의한다.
subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.201 192.168.0.220;    # 할당할 IP 주소의 범위
  option routers 192.168.0.1;   # 디폴트 게이트웨이의 IP 주소
  option domain-name-servers 8.8.8.8, 8.8.4.4;    # DNS 서버의 IP 주소
}

특정 클라이언트가 항상 똑같은 IP 주소를 할당받도록 해 보자. 이 경우에 해당 클라이언트의 MAC 주소가 필요하다.

아래 명령으로 MAC 주소를 알아낸다.

ip addr show

서브넷을 정의한 괄호 안에 아래 내용을 추가한다.

host client-221 {
  hardware ethernet 69:41:10:91:11:22;    # MAC 주소
  fixed-address 192.168.2.221;    # IP 주소
}

다음은 /etc/dhcp/dhcpd.conf 파일의 전체 내용이다.

default-lease-time 600;
max-lease-time 7200;
authoritative;

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.201 192.168.0.220;
  option routers 192.168.0.1;
  option domain-name-servers 8.8.8.8, 8.8.4.4;

  host client-221 {
    hardware ethernet 69:41:10:91:11:22;
    fixed-address 192.168.2.221;
  }
}

DHCP 서버의 또다른 설정 파일은 /etc/default/isc-dhcp-server 이다. 이 파일은 DHCP 서버와 네트워크 인터페이스를 바인딩하는 역할을 한다. 이러한 바인딩은 DHCP 서버에 여러 개의 네트워크 인터페이스가 있을 경우에 필요하다.

/etc/default/isc-dhcp-server 파일을 열고 아래와 같은 내용으로 작성한다.

INTERFACESv4="enp4s0"
INTERFACESv6=""

enp4s0 은 네트워크 인터페이스 이름이다. DHCP 서버는 이 인터페이스를 통해 클라이언트 요청에 응답하게 된다.

모든 설정을 마쳤다. 변경한 내용을 적용하기 위해 DHCP 서버를 재시작한다.

sudo systemctl restart isc-dhcp-server

DHCP 서버의 동작 상태를 확인해 보자.

sudo systemctl status isc-dhcp-server

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) 를 입력해도 된다.

Categories
Computer Network

우분투 리눅스에서 DHCP 서버를 설치하고 설정하기

우분투의 터미널 창에서 아래 명령으로 DHCP 서버를 설치한다.

sudo apt install isc-dhcp-server

설치가 끝났다면 DHCP 서버 설정(setup)을 해 보자. DHCP 서버의 설정 파일은 /etc/dhcp/dhcpd.conf 이다. 편집을 하기 전에 이 파일을 백업해 두자.

sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak

편집기로 파일을 연다.

sudo vi /etc/dhcp/dhcpd.conf

파일의 기존 내용을 모두 삭제한다. 그리고 아래와 같은 내용을 입력한다.

default-lease-time 600;    # IP 주소 임대 시간은 600초
max-lease-time 7200;    # IP 주소 최대 임대 시간은 2시간

subnet 192.168.0.0 netmask 255.255.255.0 {    # 네트워크 주소와 서브넷 마스크
  range 192.168.0.201 192.168.0.220;    # 임대할 IP 주소의 범위
  option routers 192.168.0.1;    # 게이트웨이 서버의 주소
  option domain-name-servers 210.220.163.82, 219.250.36.130;    # 도메인 네임 서버의 주소
  host static-ip {    # 특정 호스트에 고정 IP 주소를 할당하기 위한 부분
    hardware ethernet 68:14:02:82:12:28;    # 해당 호스트 랜카드의 MAC 주소
    fixed-address 192.168.0.221;    # 해당 호스트에 할당할 고정 IP 주소
  }
}

IP 주소 및 MAC 주소는 독자의 네트워크 환경에 맞게 수정해야 한다. 해시 (#) 기호 뒤에 있는 설명 부분은 입력할 필요가 없다.

fixed-address 192.168.0.221; 부분을 보자. 여기서 지정한 주소는 range 192.168.0.201 192.168.0.220; 부분의 범위에 포함되지 않는 것이어야 한다.

파일을 편집한 후 저장하고 편집기를 닫는다.

DHCP 서버를 재실행하여 설정한 내용을 적용한다.

sudo systemctl restart isc-dhcp-server

아래 명령은 DHCP 서버가 할당한 IP 주소의 리스트를 출력한다.

dhcp-lease-list

출력 결과를 /etc/dhcp/dhcpd.conf 파일에서 설정한 내용과 비교해 보자. 고정 IP 주소는 출력 결과에 포함되지 않는다.