OS: Raspbian Jessie
HW: Raspberry Pi 2 Model B
NIC: TP-LINK TL-WN722N (Atheros ath9k_htc)
라즈베리파이에 USB 무선랜 카드를 2개를 동시에 꽂아서 쓰면서, 편의를 위해서 각 인터페이스 이름(wlan0, wlan1, ...)에 네트워크 설정을 강제로 지정해 두었다. 예를 들어, wlan0은 hostapd를 돌려서 항상 AP가 되도록 하고, wlan1은 ad-hoc 모드로 다른 라즈베리파이와 네트워크를 구축하도록 하였다.
<문제 상황>
그런데 재부팅하고 나면 거의 매번 인터페이스 이름에 실제로 매핑되는 USB 무선랜카드가 달라지는 현상이 있었다. 인터페이스 이름에 할당되는 무선랜카드의 맥주소(물리적 주소, MAC address, HW address)가 재부팅할 때마다 랜덤하게 배정되는 것이다. 즉, ifconfig로 인터페이스 정보를 볼 때, 아래와 같은 출력 결과에서 HWaddr 영역이 서로 뒤바뀌는 일이 비일비재하게 나타났다.
wlan0 Link encap:Ethernet HWaddr a0:f3:c1:2b:85:7b
inet addr:10.0.4.1 Bcast:10.0.4.255 Mask:255.255.255.0
inet6 addr: fe80::a2f3:c1ff:fe2b:857b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1301 errors:0 dropped:0 overruns:0 frame:0
TX packets:1379 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:230487 (225.0 KiB) TX bytes:539231 (526.5 KiB)
wlan1 Link encap:Ethernet HWaddr a0:f3:c1:2a:ca:04
inet addr:192.168.3.4 Bcast:192.168.3.255 Mask:255.255.255.0
inet6 addr: fe80::a2f3:c1ff:fe2a:ca04/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:89 errors:0 dropped:0 overruns:0 frame:0
TX packets:122 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:10699 (10.4 KiB) TX bytes:14048 (13.7 KiB)
(라즈베리파이 기본 설정에서는 NIC가 여러 개일 경우,
부팅할 때마다 빨간색 표시한 HWaddr 부분이 랜덤으로 계속 바뀐다.)
일반적인 상황에서는 별 문제가 아닐 수도 있겠지만, 내 경우에는 이렇게 맥주소가 뒤바뀌는 현상 때문에 애드혹 네트워크(ad-hoc network)를 구성할 때마다 여간 불편한 일이 아닐 수가 없었다. 애드혹 네트워크 설정을 /etc/network/interfaces 파일에 해 두더라도, 실제로 통신이 가능해지기 위해서는 서로 ping을 주고받는 과정과 어느정도의 시간을 거쳐서 각자 ARP 테이블을 구성해야만 한다.
pi@raspberrypi ~ $ arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.3.5 ether a0:f3:c1:2b:85:e7 CM wlan1
192.168.5.1 ether 10:6f:3f:e7:e8:3e C eth0
192.168.3.6 ether a0:f3:c1:2a:ca:3b CM wlan1
192.168.3.7 ether 00:26:66:4c:1c:1d CM wlan1
만약 모든 라즈베리파이의 wlan1 인터페이스를 애드혹 네트워크로만 쓰기로 하고, 각 wlan1 인터페이스의 맥 주소와 고정IP 주소를 가지고 수동으로 ARP 테이블에 등록하는 스크립트를 만들어서 부팅 때마다 자동으로 실행되게 한다면, 불편하게 ping을 여러 차례 날릴 필요 없이 애드혹 네트워크를 바로 사용할 수 있게 된다. 하지만 맥주소가 부팅할 때마다 뒤바뀌면 ARP 테이블을 수동으로 추가하더라도 엉뚱한 맥주소가 등록됨으로 인해서 통신을 할 수가 없다.
<해결 방법>
udev에 network rule을 추가하면 된다. [1]
참고로 우분투 데스크탑에는 기본으로 맥주소와 인터페이스 이름을 고정해서 기억하게 되어 있다.
아래와 같은 문법으로 파일을 수정하거나, 없으면 파일을 만들어서 추가한다.
#파일명: /etc/udev/rules.d/10-network.rules
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="wlan0"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="ff:ee:dd:cc:bb:aa", NAME="wlan1"
ATTR{address} 부분에 랜카드의 맥주소, NAME 부분에 강제 지정할 인터페이스 이름을 입력한다.
<참고자료>
[1] https://wiki.archlinux.org/index.php/Network_configuration#Device_names
'IT > Linux' 카테고리의 다른 글
SCP에 찍히는 실시간 전송속도를 로그로 저장하기 (script 활용) (3) | 2016.05.13 |
---|---|
QEMU KVM: 가상머신 이미지를 다른 호스트에 옮기기 (0) | 2016.04.16 |
tcpdump를 여러 네트워크 인터페이스에 대하여 실행 (0) | 2016.03.02 |
SSH로 X11 forwarding 되도록 로그인할 때 .Xauthority 오류 해결법 (0) | 2016.02.03 |
FreeRDP로 윈도우 원격 데스크톱 연결 시 글꼴 다듬기(font smoothing) (0) | 2015.12.31 |