리눅스에서 OpenVPN 설정하는 방법은 널리 나와 있지만 아무래도 공식 홈페이지의 가이드만큼 가장 명료한 방법은 없을 것이다.
하지만 직접 사이트(링크: SETTING UP YOUR OWN CERTIFICATE AUTHORITY (CA) AND GENERATING CERTIFICATES AND KEYS FOR AN OPENVPN SERVER AND MULTIPLE CLIENTS)에 들어가보니 현재 시점 버wjs인 2.4.X가 아닌 2.3.X 이하의 버전에 대한 매뉴얼만 있었다. easy-rsa와 관련된 내용에서 차이가 발생했다.
easy-rsa 3버전의 사용방법이 써 있지 않는데, 사용방법을 간단하게 정리하면 아래와 같다.
# apt-get install easy-rsa
easy-rsa를 설치하면 OpenVPN 공식 튜토리얼과 마찬가지로 /usr/share/easy-rsa가 설치된다. 이 폴더를 통째로 작업할 자신만의 위치로 복사한다. 버전 확인은 복사한 easy-rsa폴더에서 ./easyrsa –help 를 쳐 나오는 내용의 상단을 확인하면 된다.
pki, ca는 이전 버전과 동일한 방법으로 진행하며, 2버전과의 차이는 서버와 클라이언트 키를 생성하는데 차이가 있다. 한 번에 쓰면 아래와 같다.
# ./easyrsa init-pki
# ./easyrsa build-ca
# ./easyrsa build-server-full <서버 파일 이름 지정>
# ./easyrsa build-client-full <클라이언트 파일 이름 지정>
서버와 클라이언트 키를 생성하는 부분 외에는 OpenVPN 사이트의 설명과 다를 부분이 없으므로 동일하게 진행한다. 다음 할 일은 서버에 필요하다는 Diffie Hellman 파라미터를 생성한다. 3 버전에서는 build-dh가 아닌 gen-dh로 커맨드가 바뀌었고, 보안 취약점의 이유로 키의 길이가 1024비트에서 2048비트로 기본 값이 바뀌었다. 다른 길이의 키를 생성하려면 다른 패키지를 사용해야 할 듯 하다.
# ./easyrsa gen-dh
나머지 내용은 OpenVPN 사이트의 설명대로만 진행하면 된다. 하지만 여기서 중요한 점. CREATING CONFIGURATION FILES FOR SERVER AND CLIENTS 내용을 보면 doc 폴더 안에 들어있는 서버 및 클라이언트 config 파일을 이용하면 된다고만 써 있는데, 그대로 사용해도 연결이 제대로 되긴 한다. 하지만 보통 VPN을 사용하는 대표적인 목적 중 하나는 접속한 서버의 IP로 인터넷을 돌아다니는 건데, 이 기능은 기본 설정으로 꺼 있다. 즉 VPN서버에 연결되어도 서버 IP가 아닌 자신의 IP로 인터넷을 돌아다니게 된다.
그 설정 하나는 아래와 같다. 서버 config 파일에 아래와 같은 내용이 주석처리(;)되어 있거나 없으면 추가해준다.
# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
push "redirect-gateway def1 bypass-dhcp"
그리고 iptables로 POSTROUTING 설정을 추가해줘야 하며 ip_forward를 켜줘야 하는데 이 내용은 구글링하면 흔하게 나오니 검색해서 복붙하면 될 듯 하다.
그래도 일단 대충 아래에 추가해 두기로. 영구 저장 방법은 나중에 포스팅하기로 하고 간단하게 설정하는 방법은 아래와 같다.
# echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -s 10.4.0.1/2 -o eth0 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
