사용방식 |
3G Tethering을 이용해서 라즈베리 파이를 WiFi공유기로 만들자!
주의! 설명에 // 라고 나온 것은 코드를 강조하기 위해 들어간 것이므로 입력하지 않는다!
----
준비물:
1. 라즈베리파이 모델B
2. 3G모뎀 혹은 안드로이드 스마트폰
3. USB WiFi 어댑터 (iptime은 드라이버 찾기가 안되서 포기)
http://www.amazon.de/EDIMAX-EW-7811UN-Wireless-Adapter-IEEE802-11b/dp/B003MTTJOY/ref=sr_1_5?ie=UTF8&qid=1381024377&sr=8-5&keywords=raspberry+wifi
----
1. 하드웨어 셋업
USB WiFi Adaptor를 끼우기 전에 라즈베리 파이('파이'라고 줄여 쓰겠음) 전원을 꺼야한다.
//
sudo shutdown -h now
//
다시 파이 전원을 킨다.
ifconfig -a
wlan0 이라는 항목이 보여야 한다.
----
2. 프로그램 설치하기
hostapd와 isc-dhcp-server라는 두 개의 프로그램을 설치한다.
//
sudo apt-get install hostapd isc-dhcp-server
//
----
3.1 DHCP 서버 설정하기 - dhcpd.conf 수정하기
dhcpd.conf 파일을 수정해야 한다.
//
sudo nano /etc/dhcp/dhcpd.conf
//
이렇게 생긴 줄을 찾아서...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
앞에다가 #을 붙여준다. #을 붙이면 주석처리되서 실행이 안된다.
//
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
//
이렇게 생긴 줄을 찾아서...
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;
앞에 붙은 #을 지워준다. 즉 실행하게 해 주는 것이다. 마지막 줄 authoriative;를 실행한다.
//
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
//
그리고 밑으로 내려서 마지막에 이것들을 추가한다. (팁: nano에서 Ctrl+V를 누르면 뒤로 넘어간다.)
//
subnet 192.168.42.0 netmask 255.255.255.0 {
range 192.168.42.10 192.168.42.50;
option broadcast-address 192.168.42.255;
option routers 192.168.42.1;
default-lease-time 600;
max-lease-time 7200;
option domain-name "local";
option domain-name-servers 8.8.8.8, 8.8.4.4;
}
//
Ctrl+X를 누르고 y를 눌러 저장하고 빠져나온다.
----
3.2 DHCP 서버 설정하기 - isc-dhcp-server 수정하기
isc-dhcp-server를 수정해야 한다.
//
sudo nano /etc/default/isc-dhcp-server
//
맨 밑으로 내리면 INTERFACES=""항목이 보인다. 이것을
INTERFACES="wlan0"
으로 바꿔준다.
----
4. wlan0을 정적 IP로 바꿔주기
공유기의 ip로 사용할 것이기에 바뀌면 안된다. 그래서 수동으로 설정해 준다.
//
sudo nano /etc/network/interfaces
//
auto wlan0 이라는 항목이 보이면 앞에 #을 붙여주어 비활성화 한다. 만약 없다면 관계없다.
이것을 추가한다.
//
iface wlan0 inet static
address 192.168.42.1
netmask 255.255.255.0
//
저장하고 나온다.(Ctrl-X, y 엔터)
실행한다.
//
sudo ifconfig wlan0 192.168.42.1
//
----
5. WiFi 공유기 AP 설정하기
공유기를 설정한다. 패스워드를 치고 들어오게 설정할 것이다.
//
sudo nano /etc/hostapd/hostapd.conf
//
다음을 입력해 준다.
//
interface=wlan0
driver=rtl871xdrv
ssid=공유기이름(영어로)
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=비밀번호(영어나숫자로)
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
//
ssid와 wpa_passphrase는 공유기 이름이고 그 비밀번호다. 각자 알아서 설정한다.
만약 driver를 못 찾는다고 하면, 위의 내용 중 driver=rtl871xdrv 를 driver=nl80211 으로 바꿔준다. 만약 그래도 못 찾으면 각자 알아내야 하는데, 필자는 찾지 못하고, 그냥 커뮤니티에서 추천하는 usb를 구입했다. EDIMAX EW-7811UN을 추천한다. 싸진 않지만 뭐 쓸만하다.
설정한 값을 파이가 인식하게 만들자.
//
sudo nano /etc/default/hostapd
//
설정한 값을 파이가 인식하게 만들자.
//
sudo nano /etc/default/hostapd
//
이 것을 찾아서
#DAEMON_CONF=""
다음과 같이 고친다.
//
DAEMON_CONF="/etc/hostapd/hostapd.conf"
//
앞에 #을 빼는 것을 잊지말것!
#DAEMON_CONF=""
다음과 같이 고친다.
//
DAEMON_CONF="/etc/hostapd/hostapd.conf"
//
앞에 #을 빼는 것을 잊지말것!
----
6. 3G 테더링 설정하기
안드로이드폰 혹은 3g모뎀 테더링 설정하기. 먼저 핸드폰에서 테더링 설정을 한다.
//
sudo nano /etc/network/interfaces
//
usb로 연결된 장치를 dhcp로 분배하기를 설정한다. 이 것을 추가한다.
//
iface usb0 inet dhcp
//
저장하고 나온 뒤(Ctrl-X, y 엔터), 그리고 이 명령어를 친다.
//
sudo ifup usb0
//
재부팅 한다. sudo reboot
재부팅 한 뒤 스마트폰이나 모뎀에서 테더링을 다시 켜 준다. 켜져 있으면 안해도
----
7. 네트워크 포트포워딩 설정하기
실행한다.
//
sudo nano /etc/sysctl.conf
//
맨 밑에 이것을 추가한다.
//
net.ipv4.ip_forward=1
//
저장하고 나와서(Ctrl-X, y 엔터) 실행한다.
//
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
//
3G로 받아오는 정보를 WiFi로 쏴주는 작업을 해야한다. usb0에서 받아온 것을 wlan0으로 포워딩 해주기. 아래 3개의 코드를 순서대로 실행한다.
//
sudo iptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE
sudo iptables -A FORWARD -i usb0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o usb0 -j ACCEPT
//
사실 이 한줄만 있어도 동작한다.
//
sudo iptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE
//
실행여부는 sudo iptables -t nat -S 그리고 sudo iptables -S로 확인해 볼 수 있다.
재부팅 해서도 계속 실행되게 해 주기. 실행한다.
//
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
//
인터페이스에 다시 추가해 준다. 실행한다.
//
sudo nano /etc/network/interfaces
//
이 것을 마지막에 추가한다.
//
up iptables-restore < /etc/iptables.ipv4.nat
//
----
8. 거의 다 끝났다. hostapd 업데이트하기
필요한 파일을 받는다.
//
wget http://www.adafruit.com/downloads/adafruit_hostapd.zip
//
압축을 푼다.
//
unzip adafruit_hostapd.zip
//
원래 있던 파일을 안전을 위해 백업한다.
//
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.bak
//
실행을 위해 폴더 위치를 옮긴다.
//
sudo mv hostapd /usr/sbin
//
실행할 수 있게 chmod를 실행한다.
//
sudo chmod 755 /usr/sbin/hostapd
실행한다.
//
sudo nano /etc/sysctl.conf
//
맨 밑에 이것을 추가한다.
//
net.ipv4.ip_forward=1
//
저장하고 나와서(Ctrl-X, y 엔터) 실행한다.
//
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
//
3G로 받아오는 정보를 WiFi로 쏴주는 작업을 해야한다. usb0에서 받아온 것을 wlan0으로 포워딩 해주기. 아래 3개의 코드를 순서대로 실행한다.
//
sudo iptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE
sudo iptables -A FORWARD -i usb0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o usb0 -j ACCEPT
//
사실 이 한줄만 있어도 동작한다.
//
sudo iptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE
//
실행여부는 sudo iptables -t nat -S 그리고 sudo iptables -S로 확인해 볼 수 있다.
재부팅 해서도 계속 실행되게 해 주기. 실행한다.
//
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
//
인터페이스에 다시 추가해 준다. 실행한다.
//
sudo nano /etc/network/interfaces
//
이 것을 마지막에 추가한다.
//
up iptables-restore < /etc/iptables.ipv4.nat
//
----
8. 거의 다 끝났다. hostapd 업데이트하기
필요한 파일을 받는다.
//
wget http://www.adafruit.com/downloads/adafruit_hostapd.zip
//
압축을 푼다.
//
unzip adafruit_hostapd.zip
//
원래 있던 파일을 안전을 위해 백업한다.
//
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.bak
//
실행을 위해 폴더 위치를 옮긴다.
//
sudo mv hostapd /usr/sbin
//
실행할 수 있게 chmod를 실행한다.
//
sudo chmod 755 /usr/sbin/hostapd
//
----
9. 마지막 테스트
----
무선 와이파이를 시험 가동해 보자! 실행한다.
//
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
//
여러분이 설정한 SSID가 보이면 성공이다. 접속은 되지만 아직 파일 송수신은 안된다.
----
10. 마무리
----
서버를 시작해 보자.
//
sudo service hostapd start
sudo service isc-dhcp-server start
//
시작이 될 것이다. 그리고 start 대신에 status로 상황을 확인할 수 있다.
시작프로그램에 등록해 주자.
//
sudo update-rc.d hostapd enable
sudo update-rc.d isc-dhcp-server enable
//
그리고 혹시 모르니 키체인을 홈폴더에 복사해 준다.
//
sudo mv /usr/share/dbus-1/system-services/fi.epitest.hostap.WPASupplicant.service ~/
//
끝났다. 재부팅 해보자.
----
문제점: 파이 내에서 ping이나 apt-get, 즉 외부에서 받아 오는 것이 안된다. 아무리 뒤져봐도 이유를 모르겠음.
그래서 발견한 방법. 외부 wifi usb동글을 하나 더 꼽고, wlan1로 인식한 다음에 Pi_AP에서 다시 받아옴.
다음을 /etc/networt/interfaces에 추가:
### wlan0 to wlan1
allow-hotplug wlan1
iface wlan1 inet dhcp
wpa-ssid "공유기이름"
wpa-psk "비밀번호"
문제점: 파이 내에서 ping이나 apt-get, 즉 외부에서 받아 오는 것이 안된다. 아무리 뒤져봐도 이유를 모르겠음.
그래서 발견한 방법. 외부 wifi usb동글을 하나 더 꼽고, wlan1로 인식한 다음에 Pi_AP에서 다시 받아옴.
다음을 /etc/networt/interfaces에 추가:
### wlan0 to wlan1
allow-hotplug wlan1
iface wlan1 inet dhcp
wpa-ssid "공유기이름"
wpa-psk "비밀번호"
참고문헌:
http://learn.adafruit.com/setting-up-a-raspberry-pi-as-a-wifi-access-point/install-software
http://elinux.org/RPI-Wireless-Hotspot
http://xsatria.wordpress.com/2013/07/09/usb-tethering-from-android-to-raspberry-pi/
http://xsatria.wordpress.com/2013/07/09/usb-tethering-from-android-to-raspberry-pi/
No comments:
Post a Comment