Unix/Arch Linux

OpenVPN

ForceCore 2016. 11. 30. 07:58

https://wiki.archlinux.org/index.php/OpenVPN


서버 세팅하기가 그렇게 어렵진 않은 편이다. 가장 어려운 부분은 certificate 만드는 부분인데.. 으휴.

저 글에서 포인트는


ta.key, ca.crt 는 서버와 클라이언트가 같은 것을 공유한다는 점이다. 말하자면 클라이언트가 서버에 로그온 하기위한 비밀번호로 사용된다는 뜻이다.


서버쪽에선


# openvpn /etc/openvpn/server.conf

로 실행을 해보고


클라이언트 쪽에선


# openvpn /etc/openvpn/client.conf


정도로 접속을 시도해본다. 에러메시지가 안 나오면 일단 성공.

그리고


$ ip addr


명령어를 클라이언트에 쳐봤을 때 10.8.x.x IP주소를 부여받았고, 서버의 IP주소인 10.8.0.1 로 SSH가 성공하면 완벽히 작동된다고 보면 된다. 윈도우에서 접속할 수 있을라나...


이 짓을 하는 이유는 TensorFlow 클러스터를 만들려고 그런다... 모두 다 교내에 있는 서버를 쓰면 이런 짓은 안 해도 될텐데 하아 환경이 열악하구만. 이런 식으로 클라이언트를 만들었을 때 그게 performance 향상을 가져올지 (latency나 bandwidth때문에) 그것도 좀 의문이지만 일단 해보자.


흐음... 아직 설정이 덜 됐다.

OpenVPN 서버에선 모든 클라이언트에게 접속이 가능한데 클라이언트끼린 그게 안 된다.


By default only traffic directly to and from an OpenVPN server passes through the VPN. To have all traffic, including web traffic, pass through the VPN do the following. First add the following to your server's configuration file (i.e., /etc/openvpn/server.conf)


그냥 쓰면 서버와 클라이언트간의 1:1 트래픽만 VPN서버를 통한다고 되어 있다. 그렇다고 모든 트래픽이 VPN 서버를 통하게 하는건 멍청한 일 같고, 10.8.0.x끼리만 서버를 통하게 하는 것이 맞는 듯.


이거도 의외로 쉬웠다. 이 VPN을 통해서 내가 속한 다른 192.168.0.x 라든지, 이런 네트워크가 보이게 하는건 난해하지만 내가 원하는건 그런 것 까진 아니고,


http://serverfault.com/questions/570316/how-can-multiple-clients-of-an-openvpn-server-find-each-other


topology subnet

client-to-client

라는 옵션을 서버에서 허용해주면 되는 것이다.


그리고 IP주소가 의외로 계속 변한다. 서버 빼곤. 그러면 매번 /etc/hosts를 업데이트 해줘야 하는 문제점이 꽃피게 될 것이다.

http://michlstechblog.info/blog/openvpn-set-a-static-ip-address-for-a-client/


# EXAMPLE: Suppose you want to give

# Thelonious a fixed VPN IP address of 10.9.0.1.

# First uncomment out these lines:

;client-config-dir ccd

;route 10.9.0.0 255.255.255.252

# Then add this line to ccd/Thelonious:

#   ifconfig-push 10.9.0.1 10.9.0.2


예제 설정파일에도 그런 말이 적혀있네.
ccd라고 되어있는데 /etc/openvpn/ccd 처럼 절대경로로 바꿔주자. 그리고 VPN IP가 10.9... 일 필요는 없으니 ccd 디렉토리에 대한 사항만 코멘트 해제하면 될 것 같구만.

그리고 어느 클라이언트가 어느 이름을 가졌는지 구분은 easy-rsa에서 지어줬던 host 이름을 가지고 하는 것이므로 그 이름 그대로 설정 파일을 만들어주면 되겠다. 클라이언트 이름이 Thelonious면
ccd/Thelonious 란 파일을 만들고 그 안에 IP주소를 지정해준다. (CN명임을 주의할 것. FQDN을 적었으면 FQDN과 같은 파일명을.. 즉 Thelonious.net.com 이런식으로 파일명을 지어야 할 수도 있다.)

ifconfig-push 10.8.0.10 255.255.255.0

이렇게... 성공적.