블로그 이미지
훅크선장

카테고리

분류 전체보기 (362)
사진이야기 (23)
펭귄컴퓨팅 (121)
컴퓨터보안 (84)
절름발이 프로그래머 (59)
하드웨어개조 (23)
멀알려줄까 (35)
홈베이킹&홈쿠킹 (2)
잡다한것들 (15)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

태그목록

최근에 올라온 글

제가 설치한 펌웨어 버전은 DD-WRT v24-sp2 (08/07/10) std입니다.

Dlink DIR-825 제품의 기본 펌웨어에는 VPN(PPTP, OpenVPN)freeRADIUS가 탑재되어 있습니다.


로컬 LAN 상에서 사용하는 IP 대역은 디폴트 설정인 192.168.1.1이 아닌, 192.168.44.1을 선택해서 사용하고 있습니다. 가능하면 C-class 대역을 일반적인 공유기가 사용하는 0, 1, 10, 100 등은 피하는 것이 좋습니다. 그래야 iptables를 이용한 패킷 라우팅에서 혼동이 적고, VPN등을 구축할 때도 혼선이 생기는 것을 피할 수 있습니다.

로컬 LAN 설정시, 피해야 할 IP 대역은

192.168.0.1

192.168.1.1

192.168.10.1

192.168.100.1

등입니다.

C-class 대역을 자기만의 번호를 선정해서 사용하기 바랍니다. (, 192.168.132.1)



DD-WRT 상단 메뉴에서 Services -> VPN을 선택합니다.

OpenVPN Daemon 항목을 찾아서,

Start OpenVPN Daemon 옵션을 Enable로 선택하고,

Start TypeSystem으로 선택합니다. (WAN Up을 선택해서, 공유기 리소스를 아낄 수도 있지만, 동작 안정성이 떨어진다고 하는 이야기가 있습니다.)

그림과 같은 인증서와 관련된 여러 입력 항목들이 나옵니다. (전 단계에서 생성하였던 인증서들의 내용이 필요합니다.)

 

일단, Certificate Revoke ListOpenVPN TLS Auth에는 아무 것도 입력하지 않습니다. 필요없는 부분이니 비워두면 됩니다.

 

CA Cert 부분에는 전 단계에서 생성한 ca.crt 파일 내용을 넣습니다.

인증서의 파일 내용을 넣을 때는 반드시, , 항상 “-----BEGIN CERTIFICATE-----” 행부터 “-----END CERTIFICATE-----” 행까지를 포함해서 넣습니다. 제외시키면 절대로 안됩니다. 반드시 포함시켜야 합니다.

 

Public Client Cert 부분에는 전 단계에서 생성한 server.crt 파일 내용을 넣습니다.

Private Client Key 부분에는 전 단계에서 생성한 server.key 파일 내용을 넣습니다.

DH PEM 부분에는 전 단계에서 생성한 dh2048.pem 파일 내용을 넣습니다. ( dh2048.pem 파일이 없고, 대신 dh1024.pem 파일이 있다면, 그 파일 내용을 넣습니다. 이것은 기본 키 크기에 따라 파일명이 달라지기 때문입니다. 1024 bits 키를 사용하면, dh1024.pem 파일이 생기고, 2048 bits 키를 사용하면, dh2048.pem 파일이 생성됩니다.)

 

OpenVPN Config 부분에는 OpenVPN을 서버로 사용하기 위한 설정 파일 내용을 넣습니다.

다음과 같은 내용인데, 현재 공유기 설정 및 사용할 환경에 따라 조금씩 달라질 수 있습니다.

예제로 보이는 다음의 내용은 아주 잘 동작하는 기본 형태입니다.


push "route 192.168.44.0 255.255.255.0"

server 10.100.200.0 255.255.255.0

 

dev tun0

proto tcp

port 1194

keepalive 10 120

 

dh /tmp/openvpn/dh.pem

ca /tmp/openvpn/ca.crt

cert /tmp/openvpn/cert.pem

key /tmp/openvpn/key.pem

 

management localhost 5001

 

 

설정파일 내용

설명

push "route 192.168.44.0 255.255.255.0"

OpenVPN의 가상 네트워크가 기본으로 사용할 라우트 정보를 지정합니다. 192.168.44.0는 각 공유기의 로컬 LAN IP 대역으로 바꾸어 사용해야 합니다.

server 10.100.200.0 255.255.255.0

OpenVPN의 가상 네트워크가 사용할 네트워크 대역을 지정합니다. 192.168.x.x 대역을 사용해도 됩니다만, 일반적인 사설 네트워크 망과의 혼동을 가급적 피하기 위해서, 10.x.x.x 대역으로 지정하는 것이 좋습니다. 혼동을 피할 수 있는 적절한 IP 대역을 선정해서 사용하면 됩니다.

dev tun0

OpenVPN이 사용하는 네트워크 디바이스 명을 지정합니다.

바꾸지 말고, 그대로 사용하면 됩니다.

proto tcp

OpenVPN이 사용하는 기반 프로토콜을 지정합니다.

성능을 위해서는 udp를 지정해서 사용할 수 있습니다만, 일반적인 인터넷 망에서 udp가 손실되는 경우가 많으므로, 먼저 udp로 설정해서 사용해보고, 끊김 현상이 많다면, tcp를 지정하면 됩니다.

국내 인터넷 환경에서 테스트해 본 경험에 의하면, 좀 느리더라도 tcp를 쓰는 것이 안정적입니다.(그렇게 느리지 않습니다.)

port 1194

OpenVPN이 사용하는 포트 번호를 지정합니다.

기본 포트는 UDP/TCP 모두 1194번 입니다만, 기호에 따라서 얼마든지 다른 포트 번호를 지정할 수 있습니다.

keepalive 10 120

OpenVPN이 사용하는 네트워크 연결의 상태를 확인하는 확인메시지의 옵션을 지정합니다. 10초 마다 확인 메시지를 보내고, 120초 동안 응답이 없으면, 연결이 끊어진 것으로 인식합니다.

바꾸지 말고, 그대로 사용하면 됩니다.

dh /tmp/openvpn/dh.pem

인증서가 저장되는 경로 및 파일명을 지정합니다. dh 키를 저장하는 파일입니다. (전 단계에서 생성하여, 인증서 입력항목으로 입력한 dh2048.pem 또는 dh1024.pem 파일입니다.)

ca /tmp/openvpn/ca.crt

인증서가 저장되는 경로 및 파일명을 지정합니다. dh 키를 저장하는 파일입니다. (전 단계에서 생성하여, 인증서 입력항목으로 입력한 ca.crt 파일입니다.)

cert /tmp/openvpn/cert.pem

인증서가 저장되는 경로 및 파일명을 지정합니다. dh 키를 저장하는 파일입니다. (전 단계에서 생성하여, 인증서 입력항목으로 입력한 server.crt 파일입니다.)

key /tmp/openvpn/key.pem

인증서가 저장되는 경로 및 파일명을 지정합니다. dh 키를 저장하는 파일입니다. (전 단계에서 생성하여, 인증서 입력항목으로 입력한 server.key 파일입니다.)

management localhost 5001

OpenVPN의 현황을 웹 상에서 보여주는 기능을 지정합니다.

바꾸지 말고, 그대로 사용하면 됩니다.

(DD-WRT 화면의 상단 메뉴에서 Status -> OpenVPN을 선택하면, 현재 접속된 OpenVPN의 클라이언트 현황을 볼 수 있습니다.)

현재 공유기에 설정한 OpenVPN Config 파일 내용은 공유기에 접속하는 OpenVPN 클라이언트들의 설정파일과 항목별로 동일한 값을 사용해야 하는 것들이 있습니다.

 

입력된 형태는 다음 그림과 같습니다.



다음으로 또한 중요한 설정이 남아있습니다.

OpenVPN에 의해서, 가상적으로 생성되는 VPN 네트워크가 실제 물리적인 로컬 네트워크와 연결될 수 있도록, iptables를 이용한 포워딩 라우팅을 설정해야 합니다.

 

이것은 Services -> VPN 메뉴에서가 아니라, Administration -> Commands 메뉴에서 설정합니다.

Administration -> Commands 메뉴를 선택합니다.

Command Shell 항목의 Commands 입력창에 다음과 같이 입력한 다음,

iptables -I INPUT 1 -p udp --dport 1194 -j ACCEPT

iptables -I INPUT 1 -p tcp --dport 1194 -j ACCEPT

iptables -I FORWARD 1 --source 10.100.200.0/24 -j ACCEPT

iptables -I FORWARD -i br0 -o tun0 -j ACCEPT

iptables -I FORWARD -i tun0 -o br0 -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.100.200.0/24 -o eth0 -j MASQUERADE

iptables -I INPUT 1 -i tun0 -p tcp --dport 80 -j ACCEPT


Save Firewall 버튼을 클릭합니다.

그러면, 하단에 Firewall 항목이 추가되면서, 입력한 내용이 보입니다.

 

iptables 명령어

설명

iptables -I INPUT 1 -p udp --dport 1194 -j ACCEPT

iptables -I INPUT 1 -p tcp --dport 1194 -j ACCEPT

인터넷 망에서 공유기로 OpenVPN 서비스 포트(1194)로 접속을 허용하도록 합니다. 만약 OpveVPN 설정에서 포트번호를 바꾸었다면, 그 포트번호를 지정하여야 합니다. OpenVPN의 사용 프로토콜에 따라, tcp/udp 어느 한 쪽만 지정하여도 무방합니다.

iptables -I FORWARD 1 --source 10.100.200.0/24 -j ACCEPT

OpenVPN의 가상 네트워크가 사용하는 네트워크 대역(10.100.200.0/24)에서 오는 트래픽을 우선적으로 포워딩합니다.

만약 OpveVPN 설정에서 가상 네트워크 대역을 별도로 지정하였다면, 그 가상 네트워크 대역을 바꿔 써주면 됩니다.

iptables -I FORWARD -i br0 -o tun0 -j ACCEPT

iptables -I FORWARD -i tun0 -o br0 -j ACCEPT

공유기의 로컬 LAN 네트워크 디바이스(br0)OpenVPN 네트워크의 가상 디바이스(tun0) 사이에 트래픽이 상호간 포워딩되도록 합니다.

공유기에 쉘 로그인 상태에서 #ifconfig 명령어를 실행하였을 때, 각각 로컬 LAN 네트워크 IP를 가진 디바이스와 OpenVPN 가상 네트워크 IP를 가진 디바이스를 지정한 것입니다. DD-WRT에서 디바이스 명들이 거의 동일하다고 볼 수 있지만, 확인해서 다르다면 디바이스명들을 알맞게 수정해야 합니다.

(D-Link DIR-825 제품과 Linksys WRT54G 제품의 경우 모두에서br0tun0 입니다.)

iptables -t nat -A POSTROUTING -s 10.100.200.0/24 -o eth0 -j MASQUERADE

OpenVPN의 가상 네트워크가 사용하는 네트워크 대역(10.100.200.0/24)에서 오는 트래픽을 NAT 형태로 매스커레이딩해서 라우팅합니다.

eth0WAN , 인터넷과 연결된 물리적 디바이스 명입니다. DD-WRT에서 인터넷과 연결된 디바이스는 일반적으로 eth0 이지만, 확인해서 다르다면 해당 디바이스명으로 수정해야 합니다.

(D-Link DIR-825 제품의 경우에는 eth0, Linksys WRT54G 제품의 경우에는 vlan1입니다.)

iptables -I INPUT 1 -i tun0 -p tcp --dport 80 -j ACCEPT

OpenVPN의 가상 네트워크가 사용하는 디바이스를 통해서(당연히 가상 네트워크 대역일 것입니다.) 들어오는 접속중에서 웹 접속을 우선적으로 허용합니다. 이 명령어를 설정해야만, OpenVPN의 가상 네트워크를 통하여 접속한 클라이언트들이 공유기의 웹 인터페이스 화면에 접속할 수 있습니다.

인터넷 망에서 원격으로 가상 네트워크를 통해서, 공유기를 제어/설정하고자 할 때에만 사용합니다.

 


Posted by 훅크선장
, |