don't stop believing

Ubuntu를 WiFi (AP)로 만들어 봅니다. (첫번째 도전) 본문

Network

Ubuntu를 WiFi (AP)로 만들어 봅니다. (첫번째 도전)

Tongchun 2018. 11. 29. 09:56

Ubuntu 서버를 AP로 만들어서 테스트 할 일이 생겼습니다.

네트워크의 bandwidth와 latency를 변경해서 다양한 무선 네트워크 환경을 만들어 보는 것입니다.

유료 솔루션(application 등)이야 있겠지만 잠깐 테스트 하는 거라 경험삼아 만들어 보려고 합니다.


우선 회사에 USB로 연결하는 무선 랜카드가 하나 있습니다.

ipTime A2000UA 입니다.


이걸 Ubuntu와 USB로 연결합니다. 그리고 ifconfig로 네트워크 정보를 확인해 보겠습니다.

$ ifconfig
enp3s0: flags=4163  mtu 1500
        inet 10.10.1.221  netmask 255.255.248.0  broadcast 10.10.7.255
        inet6 fe80::c400:e272:87c5:1d84  prefixlen 64  scopeid 0x20
        ether 50:46:5d:05:55:58  txqueuelen 1000  (Ethernet)
        RX packets 3543998  bytes 710191740 (710.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 83786  bytes 6353543 (6.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3894  bytes 323346 (323.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3894  bytes 323346 (323.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ubs로 연결된 무선 랜카드는 잡히지 않습니다. 그렇습니다. 드라이버를 설치해 줘야 합니다.

ipTime A2000UA의 Ubuntu 드라이버를 설치해 줍니다.

설치 정보는 아래 링크에서도 확인할 수 있습니다.

https://github.com/diederikdehaas/rtl8812AU/tree/driver-4.3.20

$ git clone https://github.com/diederikdehaas/rtl8812AU.git
$ cd rtl8812AU
$ DRV_NAME=rtl8812AU
$ DRV_VERSION=4.3.20
$ sudo mkdir /usr/src/${DRV_NAME}-${DRV_VERSION}
$ git archive driver-${DRV_VERSION} | sudo tar -x -C /usr/src/${DRV_NAME}-${DRV_VERSION}
$ sudo dkms add -m ${DRV_NAME} -v ${DRV_VERSION}
$ sudo dkms build -m ${DRV_NAME} -v ${DRV_VERSION}
$ sudo dkms install -m ${DRV_NAME} -v ${DRV_VERSION}

dkms status 명령으로 확인해 봅니다.

$ sudo dkms status
rtl8812AU, 4.3.20, 4.15.0-39-generic, x86_64: installed

이제 드라이버 설치가 완료되었습니다. usb와 kernel의 module 정보는 lsusblsmod로 확인할 수 있습니다.

다시 ipconfig로 네트워크 정보를 확인합니다.

$ ifconfig
enp3s0: flags=4163  mtu 1500
        inet 10.10.1.221  netmask 255.255.248.0  broadcast 10.10.7.255
        inet6 fe80::c400:e272:87c5:1d84  prefixlen 64  scopeid 0x20
        ether 50:46:5d:05:55:58  txqueuelen 1000  (Ethernet)
        RX packets 3603751  bytes 721214728 (721.2 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 85406  bytes 6568370 (6.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3947  bytes 327627 (327.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3947  bytes 327627 (327.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlx64e599f214f1: flags=4099  mtu 1500
        ether 64:e5:99:f2:14:f1  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 3  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlx64e599f214f1 이라고 무선 랜카드가 잡혔습니다.


다음으로는 연결한 무선 랜카드를 AP로 설정해야 합니다. iw를 설치하고 AP로 구성하겠습니다.

$ sudo apt-get install iw

iw list 명령으로 Supported interface modes을 확인합니다.

$ sudo iw list

iw list 명령을 실행하면 무선 랜(wireless devices)의 정보가 나오고 Supported interface modes 항목에 AP가 있는지 확인합니다.

Supported interface modes:

* IBSS

* managed

* AP

* monitor

* P2P-client

* P2P-GO


wlx64e599f214f1 정보도 확인해 봅니다.

$ sudo iw wlx64e599f214f1 info
Interface wlx64e599f214f1
	ifindex 3
	wdev 0x1
	addr 64:e5:99:f2:14:f1
	type managed
	wiphy 0
	txpower 12.00 dBm


AP로 사용하려면 접속한 Connection에게 IP를 할당해야 합니다. 그래서 DHCP를 구성해 줍니다.

isc-dhcp-server를 설치하고 dhcp로 할당할 IP 대역을 설정해 줍니다.

$ sudo apt-get install isc-dhcp-server
$ sudo vim /etc/dhcp/dhcpd.conf

/etc/dhcpdhcpd.conf 파일에 아래와 같이 추가합니다.

subnet 10.10.0.0 netmask 255.255.255.0 {
	range 10.10.0.10 10.10.0.50;
	option domain-name-servers 8.8.4.4;
	option subnet-mask 255.255.255.0;
	option routers 10.10.0.1;
	interface wlx64e599f214f1;
}

AP를 통해 전달할 네트워크 영역은 10.10.0.1 에서 10.10.0.254까지 입니다.

그중에서 10.10.0.10에서 10.10.0.50까지만 dhcp로 할당하도록 설정했습니다.

interface에는 무선랜 id를 등록해습니다.

이제 dhcp 서버를 재시작해 줍니다.

$ sudo /etc/init.d/isc-dhcp-server restart
[ ok ] Restarting isc-dhcp-server (via systemctl): isc-dhcp-server.service.

다시 ifconfig 명령을 확인하면 ip가 할당된 것을 볼 수 있습니다.

$ ifconfig
enp3s0: flags=4163  mtu 1500
        inet 10.10.1.221  netmask 255.255.248.0  broadcast 10.10.7.255
        inet6 fe80::c400:e272:87c5:1d84  prefixlen 64  scopeid 0x20
        ether 50:46:5d:05:55:58  txqueuelen 1000  (Ethernet)
        RX packets 336435  bytes 68564352 (68.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11494  bytes 1285959 (1.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 526  bytes 42214 (42.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 526  bytes 42214 (42.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlx64e599f214f1: flags=4163  mtu 1500
        inet 10.10.0.1  netmask 255.255.255.0  broadcast 10.10.0.255
        inet6 fe80::66e5:99ff:fef2:14f1  prefixlen 64  scopeid 0x20
        ether 64:e5:99:f2:14:f1  txqueuelen 1000  (Ethernet)
        RX packets 9399  bytes 1080379 (1.0 MB)
        RX errors 0  dropped 9  overruns 0  frame 0
        TX packets 5672  bytes 2527341 (2.5 MB)
        TX errors 0  dropped 36 overruns 0  carrier 0  collisions 0


이제 무선 AP 설정을 해야 합니다.

hostapd를 설치하고 AP 설정을 해줍니다.

$ sudo apt-get install hostapd
$ sudo vim /etc/hostapd/hostapd.conf

/etc/hostapd/hostapd.conf 파일을 열고 아래와 같이 작성해 줍니다.

interface=wlx64e599f214f1
driver=rtl8812AU
ssid=tongchunAP
ignore_broadcast_ssid=0
hw_mode=g
channel=11
wpa=2
wpa_passphrase=ngle1234

wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP wpa_ptk_rekey=600 macaddr_acl=0

interface에는 무선랜 id를 입력합니다.

driver에는 무선랜의 드라이버 이름이구요.

AP의 ssid는 tongchunAP로 했습니다.


/etc/default/hostapd에 앞서 작성한 config 정보를 추가해 줍니다.

$ sudo vim /etc/default/hostapd

/etc/default/hostapd 파일을 열면 DAEMON_CONF 설정 항목이 있습니다. 여기에 작성한 config 경로를 입력합니다.

DAEMON_CONF="/etc/hostapd/hostapd.conf"

저장이 되었다면 hostapd를 실행해 봅니다.

실행 명령은 sudo hostapd -d /etc/hostapd/hostapd.conf 입니다.

$ sudo hostapd -d /etc/hostapd/hostapd.conf random: Trying to read entropy from /dev/random Configuration file: /etc/hostapd/hostapd.conf Line 2: invalid/unknown driver 'rtl8812AU' 1 errors found in configuration file '/etc/hostapd/hostapd.conf' Failed to set up interface with /etc/hostapd/hostapd.conf hostapd_init: free iface 0x5605d1e8ceb0 Failed to initialize interface

그런데... 에러가 나네요.

새로 추가한 무선 랜 카드의 드라이버인 rtl8812AU를 찾을 수 없다고 합니다.

hostapd에서 드라이버 인식이 안되는 것 같습니다. 우선 /etc/hostapd/hostapd.conf에서 driver 정보를 제거하고 가겠습니다.

아래와 같이 driver 옵션 앞에 #을 붙여서 제거합니다.

interface=wlx64e599f214f1
#driver=rtl8812AU
ssid=tongchunAP
ignore_broadcast_ssid=0
hw_mode=g
channel=11
wpa=2
wpa_passphrase=ngle1234
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
wpa_ptk_rekey=600
macaddr_acl=0

다시 sudo hostapd -d /etc/hostapd/hostapd.conf 명령으로 실행해 봅니다.

잘 되네요. Control + C로 종료하고 백그라운드로 항상 실행될 수 있도록 systemctl에 hostapd를 추가해 줍니다.

$ sudo systemctl enable hostapd
$ sudo systemctl start hostapd
$ sudo systemctl status hostapd

추가된 무선 랜카드를 network interface에 추가해 줍니다.

$ sudo vim /etc/network/interfaces

/etc/network/interfaces 파일을 열고 아래 내용을 추가해 줍니다.

auto wlx64e599f214f1
iface wlx64e599f214f1 inet static
hostapd /etc/hostapd/hostapd.conf
address 10.10.0.1
netmask 255.255.255.0
wireless-mode Master


이제 마지막입니다.

Ubuntu 서버의 랜 선으로 들어오는 인터넷을 무선 랜으로 Forwarding 시켜야합니다. 그래야 추가한 AP가 인터넷과 연결이 됩니다.

$ sudo vim /etc/sysctl.conf

/etc/sysctl.conf 파일을 열고 아래 내용을 찾아 주석 처리를 해제합니다.

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

iptable 명령으로 forwarding 설정을 합니다.

$ sudo iptables -t nat -L
$ sudo iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE
$ sudo iptables -P FORWARD ACCEPT

이제 모두 되었습니다.

핸드폰에서 tongchunAP를 찾아 연결해 봅니다. 암호는 ngle1234로 했습니다.


          


그런데 문제가 있습니다.


엄~~~ 청 느립니다. BenchBee로 속도측정이 안될만큼 느립니다. 인터넷 연결이 되기는 합니다.

그리고 살짝 불안한 감이 있습니다.


다른 방법을 찾아봐야 할 것 같습니다.



[참고]

https://help.ubuntu.com/community/WifiDocs/WirelessAccessPoint


Comments