Linux에 무선랜 연결하기
사용OS - Ubuntu 13.04
무선랜카드 - IPTime N150UA Solo
1. 케이스를 뜯고 안테나를 장착한 후 PC USB슬롯에 꼽는다.
2. 하드웨어를 인식하였는지 확인한다.
$lsusb
ID 148f:7601에 Ralink Technology, Corp.항목이 있어야 한다.
2. 하드웨어를 인식하였는지 확인한다.
$lsusb
ID 148f:7601에 Ralink Technology, Corp.항목이 있어야 한다.
3. 리눅스용 드라이버를 여기서 내려받는다.
4. 압축을 해제한 후 설치한다. 구글링을 하다보면 소스 몇 군데를 수정하라는 글도 있는데, 그냥 해도 되었다.
$make
$sudo make install
$sudo modprobe mt7601Usta
5. 이제 화면 우측 상단위 네트워크 아이콘을 누르면 Wi-Fi 관련 메뉴가 추가되어 있다. 여기서 적당한 AP를 선택하고 연결하면 된다.
6. 문제는 여기까지는 별 어려움없이 없었지만, LAB에 설치한 사설AP는 잘 되면서 학교 전체에서 서비스하는 WPA2 Enterprise 네트워크에는 연결되지 않는다는 점이다. 설정을 제대로 입력하고 연결을 시도하면 끊임없이 WIFI 인증에 실패하였으니 암호를 다시 입력하라는 창이 나온다...
여러 가지 자료를 찾아본 결과 우분투 13.4 커널에서의 버그인 것 같으며, 버그의 내용은 WiFi Security 입력 정보 중에 CA Certificate가 반드시 있어야만 연결이 가능하다는 설명이다. 보통 윈도우즈나 스마트폰에서는 CA Cert를 빈칸으로 놓고 잘 연결이 되었었는데 참으로 당혹스럽다.
해결 방법은 간단한데, /etc/NetworkManager/system-connections 디렉터리에 있는 해당 설정 파일을 열고 system-ca-certs=true 라인을 지워주면 된다. 설정 파일은 앞에서 연결을 시도할 때 생성되며 파일 명은 SSID와 같다.
/etc/NetworkManager/dispatcher.d 디렉터리에 적당한 이름의 파일을 아래와 같이 추가한다.
$sudo modprobe mt7601Usta
5. 이제 화면 우측 상단위 네트워크 아이콘을 누르면 Wi-Fi 관련 메뉴가 추가되어 있다. 여기서 적당한 AP를 선택하고 연결하면 된다.
6. 문제는 여기까지는 별 어려움없이 없었지만, LAB에 설치한 사설AP는 잘 되면서 학교 전체에서 서비스하는 WPA2 Enterprise 네트워크에는 연결되지 않는다는 점이다. 설정을 제대로 입력하고 연결을 시도하면 끊임없이 WIFI 인증에 실패하였으니 암호를 다시 입력하라는 창이 나온다...
여러 가지 자료를 찾아본 결과 우분투 13.4 커널에서의 버그인 것 같으며, 버그의 내용은 WiFi Security 입력 정보 중에 CA Certificate가 반드시 있어야만 연결이 가능하다는 설명이다. 보통 윈도우즈나 스마트폰에서는 CA Cert를 빈칸으로 놓고 잘 연결이 되었었는데 참으로 당혹스럽다.
해결 방법은 간단한데, /etc/NetworkManager/system-connections 디렉터리에 있는 해당 설정 파일을 열고 system-ca-certs=true 라인을 지워주면 된다. 설정 파일은 앞에서 연결을 시도할 때 생성되며 파일 명은 SSID와 같다.
Windows에 무선랜 IP 알려주기
Ubuntu 머신은 로봇에 태우고 움직이고 다니기 때문에 그 앞을 따라 다니면서 작업을 하기가 쉽지 않다. 작업은 윈도우 데스크탑에서 터미널을 열어 하는 것이 좋겠는데, 문제는 WIFI로 학교의 Enterprise 네트워크에 연결시키다보니 IP주소가 바뀌게 되어 아주 귀찮게 되었다. 이참에 한 가지 더 작업을 하였다. Ubuntu에서 WIFI에 연결이 될 때마다 받은 IP 주소를 작업용 윈도우 데스크탑에 알려주도록 스크립트를 추가하였다./etc/NetworkManager/dispatcher.d 디렉터리에 적당한 이름의 파일을 아래와 같이 추가한다.
#!/bin/sh -e # Script to dispatch NetworkManager events # # Runs ifupdown scripts when NetworkManager fiddles with interfaces. # See NetworkManager(8) for further documentation of the dispatcher events. if [ "$1" = "ra0" ] && [ "$2" = "up" ]; then hostname | nc -u -q 1 foo.bar 9999 fi
당연히 윈도우 머신은 고정 IP 이거나 DNS에 등록된 것이어야 한다. 그 주소를 위 스크립트의 foo.bar 위치에 쓰고 UDP 9999번 포트로 자신(Ubuntu)의 호스트명을 전송하게 한다. 위 스크립트는 WIFI가 연결되어 인터페이스 ra0 이 UP 상태가 될 때마다 실행하도록 한 것이다.
윈도우 쪽에는 9999번 UDP 포트를 리스닝하고 있다가 이를 감지해서 hosts 파일을 업데이트해주는 service를 제작하여 등록해 놓는다. (이건 쉽게 만들 수 있으므로 자세한 설명은 생략^^;)