pfSense OpenVPN Client 자동 재시작 (Auto reconnecting)
앞선 글에서 pfSense 와 OpenVPN Access Server를 이용해 관리하기 편리한 OpenVPN Site-to-Site 서비스를 구축했다. 그런데, OpenVPN Access Server 는 24시간이 지난 Client 는 “사유는 보안을 위해서” 강제로 끊는다. 단일 사용자라면 문제가 없겟지만 Site-to-Site 는 복수의 사용자가 사용하기 때문에 문제가 있다.
pfSense 는 단절된 OpenVPN Client 의 자동 복구를 시도하지 않기 때문에 관리자가 매번 OpenVPN Client 를 재시작해야 하는 불편함이 있다. 이번 포스트에선 어쩔 수 없이 끊긴 Client 의 자동 복구 방법을 기술하고자 한다. 적어도 관리자가 콘솔에 접근하지 않아도 되도록.
모든 OpenVPN 관련 서비스를 재가동 함으로써 복구하는 방법이 있지만, 이 경우 이미 연결 되어 정상 서비스 중인 Client/Server 조차 재시작하기 때문에 추천하지는 않는다. 설명하고자 하는 방법은 pfSense 에 등록된 OpenVPN Client 의 연결된 컨디션을 체크하고 단절된 Client 만 복구하는 방식이다.
동작 원리는 매우 간단하다.
- OpenVpn Server 의 Gateway 에 ping 을 3회 전달한다.
- 정상적으로 처리 되었다면(reponse가 있다면) 어떠한 액션도 취하지 않는다.
- 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 를 찾는 방법은 다음과 같다.
- https://pfsense.server.com/status_openvpn.php (pfsense.server.com = pfsense 서버의 주소)
- 소스보기 후 아래 참조
즉 위와 같이 인터페이스 번호는 TOKYO-DV 는 1 번, SINGAPORE-DV 는 3번 이다. 이를 $i 에 넣으면 된다. 그리고 crontab 으로 다음을 추가하자. 아래 openvpnClient 는 위의 script 를 추가한 임의의 파일명.
*/5 * * * * /root/openvpnClient
이를 실행해 보면 다음과 같은 결과를 얻을 수 있다.
- 10.10.101.250 : TOKYO-DV 의 OpenVPN Access Server 의 PrivateIP
- 10.11.101.250 : SINGAPORE-DV 의 OpenVPN Access Server 의 PrivateIP
/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 가 증가할 수록 스크립트의 길이가 길어진다는 것. 하지만 현재로썬 딱히 대안이 없다.