사전준비
- 설치에 앞서 vpn firewall 정책설정이 선행되어야 합니다.
- ddns 설정을 하지 않았다면 ddns설정을 참고하세요. (아래 예시는 myhost.duckdns.org를 사용합니다.)
설치구성
- vpn 네트워크는 10.8.0.0/24 , udp 포트는 21194 사용
- 클라이언트의 dns는 서버(OpenWrt 라우터)의 dns 사용 (DoT로 구성한 192.168.1.1)
openvpn 설치
openvpn-easy-rsa및 openvpn-openssl. OpenWrt GUI(luci)를 사용하는 경우 luci-app-openvpn도 설치하세요.
opkg update
opkg install openvpn-easy-rsa openvpn-openssl luci-app-openvpn
키생성
디폴트 키 크기는 2048비트입니다. 2048비트면 충분하지만 4096비트로 비트를 늘리려면 export EASYRSA_KEY_SIZE=4096 로 수정하세요.
# 변수 설정
export EASYRSA_KEY_SIZE=2048
export EASYRSA_PKI="/etc/easy-rsa/pki"
export EASYRSA_REQ_CN="[whatever]"
export EASYRSA_REQ_COUNTRY="[2-letter country code]"
export EASYRSA_REQ_PROVINCE="[whatever]"
export EASYRSA_REQ_ORG="[whatever]"
export EASYRSA_REQ_ORG="[whatever]"
export EASYRSA_REQ_EMAIL="[whatever]"
export EASYRSA_REQ_OU="[whatever]"
export EASYRSA_BATCH="1"
# pki 디렉토리를 제거하고 초기화
easyrsa init-pki
# DH parameters 생성
easyrsa gen-dh
# CA 생성 (인증기관 키 생성)
easyrsa build-ca nopass
# 서버키 생성 및 자체서명 (server 라는 서버키가 생성됩니다)
easyrsa build-server-full server nopass
# 클라이언트키 생성 (client1 라는 클라이언트키가 생성됩니다)
easyrsa build-client-full client1 nopass
생성된 키 복사
생성된 다음 키를 /etc/openvpn으로 복사합니다.
cp /etc/easy-rsa/pki/ca.crt /etc/openvpn/
cp /etc/easy-rsa/pki/dh.pem /etc/openvpn/
cp /etc/easy-rsa/pki/issued/server.crt /etc/openvpn/
cp /etc/easy-rsa/pki/private/server.key /etc/openvpn/
luci 설정
/etc/config/openvpn 을 다음과 같이 편집합니다.
config openvpn 'custom_config' option config '/etc/openvpn/my-vpn.conf' option enabled '1' ...
서버 구성
/etc/openvpn/my-vpn.conf 을 수정해 openvpn 서버 설정을 합니다.
verb 4 user nobody group nogroup dev tun0 server 10.8.0.0 255.255.255.0 proto udp port 21194 txqueuelen 1000 keepalive 10 120 ncp-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-128-CBC cipher AES-256-GCM comp-lzo no client-to-client #client-config-dir /etc/openvpn/ccd push "route 192.168.1.0 255.255.255.0" push "dhcp-option DNS 192.168.1.1" #push "redirect-gateway def1" push "redirect-gateway autolocal def1" push "persist-tun" push "persist-key" persist-tun persist-key topology subnet ca /etc/easy-rsa/pki/ca.crt dh /etc/easy-rsa/pki/dh.pem cert /etc/easy-rsa/pki/issued/server.crt key /etc/easy-rsa/pki/private/server.key status-version 2 status /var/run/openvpn.status 10 log-append /var/log/openvpn.log
인터페이스 생성
openvpn 네트워크 인터페이스 생성을 위해 /etc/config/network 다음과 같이 추가합니다.
... config interface 'tun0' option ifname 'tun0' option proto 'none'
방화벽 설정
udp 포트 21194를 통해 들어오는 연결 허용합니다.
... config rule option name 'Allow-openvpn' option src 'wan' option proto 'udp' option dest_port '21194' option target 'ACCEPT'
서비스 재시작
/etc/init.d/firewall restart
/etc/init.d/network restart
/etc/init.d/openvpn restart
클라이언트 설정
client1.ovpn 화일을 아래와 같이 생성하고 위에서 생성한 키를 클라이언트에 복사합니다.
- ca.crt
- client1.crt
- client1.key
remote myhost.duckdns.org port 21194 proto udp comp-lzo no dev tun cipher AES-256-GCM client remote-cert-tls server ca ca.crt cert client1.crt key client1.key verb 3 status status auth-nocache ; log /var/log/openvpn.log
아이피타임 공유기에서 Openvpn 클라이언트로 등록하려면
어떻게 해야 할까요?
아이폰에서는 Client1.ovpn에
ca.crt
client1.crt
client1.key를
.....
....
......
를 넣어서 연결 성공하였습니다.
client1.ovpn 화일을 편집기로 열어서
ca.crt
client1.crt
client1.key 내용을 아래와 같은 형식으로 넣어주고 iptime 공유기에서 불러오면 됩니다.
remote myhost.duckdns.org
port 21194
proto udp
comp-lzo no
dev tun
cipher AES-256-GCM
client
remote-cert-tls server
; ca ca.crt
; cert client1.crt
; key client1.key
verb 3
status status
auth-nocache
; log /var/log/openvpn.log
<ca>
-----BEGIN CERTIFICATE-----
...
</ca>
<cert>
-----BEGIN CERTIFICATE-----
....
</cert>
<key>
-----BEGIN RSA KEY-----
...
</key>
iptime 공유기에서는 이상하게 안되네요. 다른 것들에서는 다 됩니다.
문의하신 내용이 iptime 공유기에서 openvpn client 설정이 안되시는거라면
먼저 vpngate.net에서 openvpn client 설정화일을 다운받아 iptime 공유기에 테스트를 해보세요.
(서버가 운영중이라고는 되어 있지만 돌아가지 않는 경우도 많이 있습니다. 안되더라도 몇개정도 해보세요.)
vpngate 서버와 연결이 된다면 설정화일을 편집기로 열어서 님께서 설정하시려는것과 비교해 보시기 바랍니다.
vpngate.net의 클라이언트 설정파일에는
comp-lzo no 가 없네요.
vpngate.net의 설정파일에 comp-lzo no를 넣으면 아이폰에서도 접속은 안됩니다.
알려주신 위의 설정파일에는
comp-lzo no 를 빼면 아이폰에서는 접속이 안되고요. (반대의 경우네요)
[ps]님의 블로그보고 많이 배우고 있습니다. 들어올 때마다 늘 감사하게 생각하고 있습니다.
comp-lzo 옵션은 openvpn 2.4부터 보안을위해 더이상 지원이 중단된 옵션인데 호환성을 위해 2.5에서도 유지되는것으로 알고있습니다.
아마 그러한 이유로 vpngate의 설정화일엔 빠져있는것 같네요.
comp-lzo 속성을 제거하면 해당 속성이 있는 클라이언트가 중단되지만 추가하면 그렇지 않은 클라이언트가 중단될수 있습니다.
따라서 서버설정 및 클라이언트 설정에서 comp-lzo no 를 삭제하고 테스트 해보세요.
그래도 어떤 문제가 있다면
ncp-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-128-CBC
cipher AES-256-GCM
도 삭제해 보세요.
그러나 슬프게도 이게 해결방법이 아닐수 있습니다. 테스트 후 댓글 부탁합니다.
comp-lzo, ncp-ciphers, cipher 다 해봤는데
아이폰에서는 어느 경우에도 잘 되지만, 아이피타임 공유기에서는 안되네요.
아아피타임 공유기가 지원하는 클라이언트 lt2p나 pptp로 연결해야 할 듯합니다.
도움 못드려 죄송합니다.
iptime 공유기에 에러로그를 볼 수 있는 기능이 있으면 도움이 될텐데...
테스트해볼 iptime 공유기가 없어 뭐라 말씀을 못드리네요.