Site icon GRIP.News

pfSense OpenVPN Client 자동 재시작 (Auto reconnecting)

2016년 11월 4일 작성된 포스트 입니다.

앞선 글에서 pfSense 와 OpenVPN Access Server를 이용해 관리하기 편리한 OpenVPN Site-to-Site 서비스를 구축했다. 그런데, OpenVPN Access Server 는 24시간이 지난 Client 는 “사유는 보안을 위해서” 강제로 끊는다. 단일 사용자라면 문제가 없겟지만 Site-to-Site 는 복수의 사용자가 사용하기 때문에 문제가 있다.

pfSense 는 단절된 OpenVPN Client 의 자동 복구를 시도하지 않기 때문에 관리자가 매번 OpenVPN Client 를 재시작해야 하는 불편함이 있다. 이번 포스트에선 어쩔 수 없이 끊긴 Client 의 자동 복구 방법을 기술하고자 한다. 적어도 관리자가 콘솔에 접근하지 않아도 되도록.

pfSense, OpenVPN Site-to-Site 구축하기

모든 OpenVPN 관련 서비스를 재가동 함으로써 복구하는 방법이 있지만, 이 경우 이미 연결 되어 정상 서비스 중인 Client/Server 조차 재시작하기 때문에 추천하지는 않는다. 설명하고자 하는 방법은 pfSense 에 등록된 OpenVPN Client 의 연결된 컨디션을 체크하고 단절된 Client 만 복구하는 방식이다.

동작 원리는 매우 간단하다.

  1. OpenVpn Server 의 Gateway 에 ping 을 3회 전달한다.
  2. 정상적으로 처리 되었다면(reponse가 있다면) 어떠한 액션도 취하지 않는다.
  3. timeout 으로 반응이 없다면 else 구문을 실행한다.
    여기서 $i 는 OpenVPN Client 의 Service No 이다.
#!/bin/sh

if ping -c3 xxx.xxx.xxx.xxx; then
  #do nothing
else
  #restart vpn clients
         /usr/local/sbin/pfSsh.php playback svc restart openvpn client $i

fi

exit 0

 

$i 를 찾는 방법은 다음과 같다.

  1. https://pfsense.server.com/status_openvpn.php (pfsense.server.com = pfsense 서버의 주소)
  2. 소스보기 후 아래 참조

즉 위와 같이 인터페이스 번호는 TOKYO-DV 는 1 번, SINGAPORE-DV 는 3번 이다. 이를 $i 에 넣으면 된다. 그리고 crontab 으로 다음을 추가하자. 아래 openvpnClient 는 위의 script 를 추가한 임의의 파일명.

*/5 * * * * /root/openvpnClient

이를 실행해 보면 다음과 같은 결과를 얻을 수 있다.

/root: ./openvpnClient
PING 10.10.101.250 (10.10.101.250): 56 data bytes
64 bytes from 10.10.101.250: icmp_seq=0 ttl=64 time=2.996 ms
64 bytes from 10.10.101.250: icmp_seq=1 ttl=64 time=2.889 ms
64 bytes from 10.10.101.250: icmp_seq=2 ttl=64 time=2.940 ms
 
--- 10.10.101.250 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 2.889/2.942/2.996/0.044 ms
PING 10.11.101.250 (10.11.101.250): 56 data bytes
 
--- 10.11.101.250 ping statistics ---
3 packets transmitted, 0 packets received, 100.0% packet loss
 
Starting the pfSense developer shell....
 
Attempting to issue restart to openvpn service...
 
openvpn has been restarted.

단점은 연결된 Client 가 증가할 수록 스크립트의 길이가 길어진다는 것. 하지만 현재로썬 딱히 대안이 없다.

 

Exit mobile version