데비안 리눅스 머신 또는 라즈베리파이를 유선랜 라우터 만들기
라즈베리 파이에서 유선랜 라우터 만들기
0. 라즈베리 파이에 라즈베리안 설치하고, 부팅한 다음, 기본 설정 해줍니다.
$ sudo raspi-config
명령을 실행하고, 다음의 작업을 실시
Expand the root filesystem and reboot
Boot to commandline, not to GUI
Configure the right keyboard map and timezone
Configure the Memory Split to give 16Mb (the minimum) to the GPU
Consider overclocking to the Medium (900MHz) setting on Pi 1, or High (1000MHz) setting on Pi 2
$ sudo su -
명령으로 root 권한에서 작업하는 것이 편하다.
1. 당연히 USB 유선랜 어댑터가 인식되어야 하겠지요?!
# ifconfig -a
에서 eth1 이 있어야죠
2. /etc/network/interfaces 파일에서 eth1에 정적 아이피 주소 설정하기
※ 이미 eth0는 게이트웨이 인터페이스로 dhcp 설정이거나, 아니면 static IP 주소를 설정했다고 가정
allow-hotplug eth1
iface eth1 inet static
address 192.168.144.1
network 192.168.144.0
hotplug가 필요한지 의문이긴 한데, eth1에 정적인 아이피 주소와 네트워크 대역만 설정
3. eth1 이 eth0 게이트웨이를 이용해서 패킷이 나갈 수 있도록, 포워딩 설정이 필요
패킷 포워딩은 커널 파라미터 설정 명령 하나와 Net Filter인 iptables 명령어 3개로 구성
1) 포워딩 설정
# echo 1 > /proc/sys/net/ipv4/ip_forward
하고,
/etc/sysctl.conf 에서 포워딩 라인을 언코멘트(맨앞의 # 글자 삭제)한다.
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
파일 수정을 완료한 다음에, # sysctl –system 명령으로 시스템에 적용할 수도 있다.
2) Net Filter 설정
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
세 개의 명령을 재부팅에서도 동일하게 가지고 가려면, 두가지 방법이 있다.
먼저, 쉡 스크립트로 매번 재부팅때마다 실행
현재 Net Filter 설정을 파일로 저장
# iptables-save > /etc/iptables.ipv4.nat
그리고, /etc/network/interfaces 파일에 다음의 구문을 추가한다.
up iptables-restore < /etc/iptables.ipv4.nat
Net Filter 설정 구문을 rc.local 파일에 추가해서 실행하는 방법도 있다.
/etc/rc.local 파일 맨 마지막에
/sbin/iptables-restore < /etc/iptables.ipv4.nat
를 추가.
스크립트 방식이 미덥지 않으시면, 대안으로,
두번째, 별도 패키지 설치
# apt-get install iptables-persistent
The installer will ask if you want to save current rules, select Yes
설치할 때, 현재 룰을 저장할꺼냐고 물어보면 “Yes”를 선택,
만약 나중에 별도로 룰을 저장하고 싶으면, # netfilter-persistent save 하면 된다능.
매번 부팅할때, 설정이 다시 동작하도록 하려면,
# systemctl enable netfilter-persistent
로 마무리.
4. DHCP 서버 설치와 설정
apt-get install isc-dhcp-server
/etc/default/isc-dhcp-server 파일에서 dhcp가 동작할 인터페이스 설정
INTERFACES="eth1"
으로 설정
/etc/dhcp/dhcpd.conf 에서 서브도메인 설정
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
위 두 라인을 커맨트 처리 (맨 앞에 # 글자 삽입)
dhcp로 할당될 IP 주소들 범위를 정의,
다음과 같이 추가
subnet 192.168.144.0 netmask 255.255.255.0 {
range 192.168.144.100 192.168.144.200;
option domain-name-servers 192.168.137.1;
option domain-name "internal.example.org";
option routers 192.168.144.1;
option broadcast-address 192.168.144.255;
default-lease-time 600;
max-lease-time 7200;
}
subnet 은 eth1에 할당한 네트워크와 동일하게 하고, range는 dhcp로 할당할 아이피 대역을 정의
도메인 네임 서버는 eth0에 연결된 실제 인터넷 DNS 아이피를 써주면 되고, 라우터 아이피는 라즈베리파이의 eth1 인터페이스 아이피 주소를 쓰면 됩니다.
만약에 도메인 네임서버를 쓰는 곳에서, eth0 게이트웨이가 연결된 곳이 DHCP로 IP를 받는다면, dnsmasq 패키지를 설치해서, 현재의 리눅스 머신, 라즈베리파이가 DNS 쿼리를 상위로 던져서 처리할 수 있도록 할 수 있습니다.
option domain-name-servers 192.168.144.1
도메인 서버를 현재 머신의 아이피 eth1 의 IP로 설정하시고,
# apt-get install dnsmasq
하면 됩니다.
서버가 잘 실행되면,
# update-rc.d isc-dhcp-server enable
명령으로 항상 시스템 부팅때, 서비스가 실행되도록 설정한다.
5. eth1 쪽에 노트북 같은 것을 붙여서, dhcp 로 아이피 잘 받아오는지? 외부로 ping 이 잘 가는지?, 그리고 인터넷이 되는 지를 검사한다.
아이피가 안 받아지면, dhcpd 설정 문제이거나, eth1 쪽 인터페이스 네트워크 설정에 문제가 있는 것이고,
인터넷만 안된다면, dns 설정문제일 가능성이 높다.
안되는 경우에는 네트워크 설정을 하나씩 짚어보면서, 체크할 것.
dhcpd 의 에러상태를 보고 싶다면,
# systemctl status isc-dhcp-server 로 볼 수 있다.
간혹 게이트웨이들이 ping을 받지 않을 수 있기 때문에, 나는 ping 던지는 대상은 항상 www.centos.org 같은 도메인으로 하거나, 기존에 ping을 잘 받는 네트워크 장비나 리눅스 머신에게만 쏜다~!
------ 현재 작업중인 내용 -------
1. dnsmasq 를 사용한다면, 굳이 isc-dhcp-server을 쓰지 않아도 된다. dnsmasq 는 dhcp 서버 기능을 가지고 있기 때문이다.
2. hostapd 를 설치하면, wifi 어댑터를 무선 AP(Access Point)로 사용할 수 있다. eth1 인터페이스가 wlan0 인터페이스로 바뀌는 것 말고, 위 내용에서 달라질 것은 크게 없다. hostapd 에서 무선접속 설정은 반드시 해야 한다.
3. 흔히 집에서 쓰는, 유무선공유기 (Home Router)와 같이 유선과 무선이 동일한 IP 대역을 가지고 자유롭고 연결되는 네트워크 환경을 만들고 싶다면, bridge 기술을 사용해서(bridge-utils 패키지를 설치), 두 개 이상의 네트워크 인터페이스를 통합하면 좋다.
※ Bridge 기술을 안쓰면, Net Filter 정의가 많이 복잡해질 것이다. iptables 명령어를 엄청 많이 고민해서 넣어야 할 지도 모른다. 그래서, Bridge 기술이 좋은게 좋은거다~!