웹사이트 검색

Debian 7의 OpenVPN 서버 및 클라이언트 설치 및 구성


이 문서에서는 Debian Linux를 사용하여 OpenVPN에서 IPv6 연결을 얻는 방법을 자세히 설명합니다. 이 프로세스는 서버로 IPv6 연결을 사용하는 KVM VPSDebian 7 및 Debian 7 데스크톱에서 테스트되었습니다. 명령은 루트로 실행됩니다.

OpenVPN이란 무엇입니까?

OpenVPN은 SSL/TLS를 사용하여 안전하고 암호화된 VPN 연결을 생성하고 인터넷 트래픽을 라우팅하여 스누핑을 방지하는 VPN 프로그램입니다. 개방형 VPN은 방화벽을 투명하게 통과할 수 있는 능력이 뛰어납니다. 실제로 상황에 따라 필요한 경우 HTTPS(443)와 동일한 TCP 포트에서 실행할 수 있으므로 트래픽을 구별할 수 없게 되어 사실상 차단이 불가능해집니다.

OpenVPN은 사전 공유된 비밀 키, 인증서 또는 사용자 이름/비밀번호와 같은 다양한 방법을 사용하여 클라이언트가 서버에 인증하도록 할 수 있습니다. OpenVPN은 OpenSSL 프로토콜을 사용하고 챌린지 응답 인증, SSO(Single Sign-On) 기능, 로드 밸런싱 및 장애 조치 기능, 다중 데몬 지원과 같은 다양한 보안 및 제어 기능을 구현합니다.

OpenVPN을 사용하는 이유

안전한 통신을 생각해보세요 – OpenVPN을 생각해 보세요. 누군가가 귀하의 인터넷 트래픽을 스누핑하는 것을 원하지 않는다면 OpenVPN을 사용하여 고도로 암호화된 보안 터널을 통해 모든 트래픽을 라우팅하십시오.

이는 공항 및 기타 장소에서 공용 WIFI 네트워크에 연결할 때 특히 중요합니다. 누가 귀하의 트래픽을 스누핑하고 있는지 확신할 수 없습니다. 스누핑을 방지하기 위해 자체 OpenVPN 서버를 통해 트래픽을 채널링할 수 있습니다.

모든 트래픽을 정기적으로 모니터링하고 웹사이트를 임의로 차단하는 국가에 거주하는 경우 OpenVPN over TCP 포트 443을 사용하여 HTTPS 트래픽과 구별할 수 없게 만들 수 있습니다. OpenVPN을 SSL 터널을 통한 OpenVPN 트래픽 터널링과 같은 다른 보안 전략과 결합하여 OpenVPN 서명을 식별할 수 있는 심층 패킷 검사 기술을 능가할 수도 있습니다.

시스템 요구 사항

OpenVPN을 실행하려면 최소한의 요구 사항이 필요합니다. 64MB RAM1GB HDD 공간이 있는 시스템이면 OpenVPN을 실행하기에 충분합니다. OpenVPN은 거의 모든 주요 운영 체제에서 실행됩니다.

Debian 7에서 OpenVPN 설치 및 구성

마스터 서버에 OpenVPN 설치

OpenVPN을 설치하려면 다음 명령을 실행하세요.

apt-get install openvpn

기본적으로 easy-rsa 스크립트는 '/usr/share/easy-rsa/' 디렉토리에 설치됩니다. 따라서 이러한 스크립트를 원하는 위치(예: /root/easy-rsa)에 복사해야 합니다.

mkdir /root/easy-rsa
cp -prv /usr/share/doc/openvpn/examples/easy-rsa/2.0 /root/easy-rsa

CA 인증서 및 CA 키 생성

'vars' 파일을 열고 다음과 같이 변경합니다. 단, 변경하기 전에 원본 파일을 백업하는 것이 좋습니다.

cp vars{,.orig}

텍스트 편집기를 사용하여 easy-rsa의 기본값을 설정합니다. 예를 들어.

KEY_SIZE=4096
KEY_COUNTRY="IN"
KEY_PROVINCE="UP"
KEY_CITY="Noida"
KEY_ORG="Home"
KEY_EMAIL="[email "

여기서는 4096 비트 키를 사용하고 있습니다. 1024, 2048, 4096 또는 8192 비트 키를 원하는 대로 사용할 수 있습니다.

명령을 실행하여 기본값을 내보냅니다.

source ./vars

이전에 생성된 모든 인증서를 정리합니다.

./clean-all

그런 다음, 다음 명령을 실행하여 CA 인증서와 CA 키를 생성합니다.

./build-ca

명령을 실행하여 서버 인증서를 생성합니다. '서버 이름'을 서버 이름으로 바꾸십시오.

./build-key-server server-name

Diffie Hellman PEM 인증서를 생성합니다.

./build-dh

클라이언트 인증서를 생성합니다. '클라이언트 이름'을 귀하의 클라이언트 이름으로 대체하십시오.

./build-key client-name

HMAC 코드를 생성합니다.

openvpn --genkey --secret /root/easy-rsa/keys/ta.key

다음과 같이 인증서를 클라이언트 및 서버 시스템에 복사합니다.

  1. 클라이언트와 서버 모두에 ca.crt가 있는지 확인하세요.
  2. ca.key 키는 클라이언트에 있어야 합니다.
  3. 서버에는 server.crt, dh4096.pem, server.keyta.key가 필요합니다.
  4. client.crt, client.keyta.key는 클라이언트에 있어야 합니다.

서버에서 키와 인증서를 설정하려면 다음 명령을 실행하세요.

mkdir -p /etc/openvpn/certs
cp -pv /root/easy-rsa/keys/{ca.{crt,key},server-name.{crt,key},ta.key,dh4096.pem} /etc/openvpn/certs/

OpenVPN 서버 구성

이제 OpenVPN 서버를 구성해야 합니다. '/etc/openvpn/server.conf' 파일을 엽니다. 아래 설명대로 변경해 주세요.

script security 3 system
port 1194
proto udp
dev tap

ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/server-name.crt
key /etc/openvpn/certs/server-name.key
dh /etc/openvpn/certs/dh4096.pem
tls-auth /etc/openvpn/certs/ta.key 0

server 192.168.88.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 1800 4000

cipher DES-EDE3-CBC # Triple-DES
comp-lzo

max-clients 10

user nobody
group nogroup

persist-key
persist-tun

#log openvpn.log
#status openvpn-status.log
verb 5
mute 20

서버에서 IP 전달을 활성화합니다.

echo 1 > /proc/sys/net/ipv4/ip_forward

다음 명령을 실행하여 부팅 시 시작되도록 OpenVPN을 설정합니다.

update-rc.d -f openvpn defaults

OpenVPN 서비스를 시작하세요.

service openvpn restart

클라이언트에 OpenVPN 설치

다음 명령을 실행하여 클라이언트 컴퓨터에 OpenVPN을 설치합니다.

apt-get install openvpn

텍스트 편집기를 사용하여 클라이언트의 '/etc/openvpn/client.conf'에서 OpenVPN 클라이언트 구성을 설정합니다. 예시 구성은 다음과 같습니다.

script security 3 system
client
remote vpn_server_ip
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/client.crt
key /etc/openvpn/certs/client.key
cipher DES-EDE3-CBC
comp-lzo yes
dev tap
proto udp
tls-auth /etc/openvpn/certs/ta.key 1
nobind
auth-nocache
persist-key
persist-tun
user nobody
group nogroup

다음 명령을 실행하여 부팅 시 시작되도록 OpenVPN을 설정합니다.

update-rc.d -f openvpn defaults

클라이언트에서 OpenVPN 서비스를 시작합니다.

service openvpn restart

OpenVPN이 IPv4에서 잘 실행되는 것으로 확인되면 OpenVPN을 통해 IPv6을 작동시키는 방법은 다음과 같습니다.

서버에서 OpenVPN으로 IPv6 작동하기

서버 구성 '/etc/openvpn/server.conf' 파일 끝에 다음 줄을 추가합니다.

client-connect /etc/openvpn/client-connect.sh
client-disconnect /etc/openvpn/client-disconnect.sh

이 두 스크립트는 클라이언트가 연결/연결 해제될 때마다 IPv6 터널을 구축/파괴합니다.

client-connect.sh의 내용은 다음과 같습니다.

#!/bin/bash
BASERANGE="2a00:dd80:003d:000c"
ifconfig $dev up
ifconfig $dev add ${BASERANGE}:1001::1/64
ip -6 neigh add proxy 2a00:dd80:003d:000c:1001::2 dev eth0
exit 0

내 호스트는 2a00:dd80:003d:000c::/64 블록에서 나에게 IPV6 주소를 할당합니다. 그래서
2a00:dd80:003d:000c를 BASERANGE로 사용합니다. 호스트가 할당한 값에 따라 이 값을 수정하세요.

클라이언트가 OpenVPN에 연결할 때마다 이 스크립트는 2a00:dd80:003d:000c:1001::1 주소를 tap0<의 IPV6 주소로 할당합니다. 서버 인터페이스.

마지막 줄은 터널에 대한 Neighbor Discovery를 설정합니다. 클라이언트측 tap0 연결의 IPv6 주소를 프록시 주소로 추가했습니다.

client-disconnect.sh의 내용은 다음과 같습니다.

#!/bin/bash
BASERANGE="2a00:dd80:003d:000c"
/sbin/ip -6 addr del ${BASERANGE}::1/64 dev $dev
exit 0

클라이언트 연결이 끊어지면 서버의 IPv6 터널 주소만 삭제됩니다. BASERANGE 값을 적절하게 수정합니다.

스크립트를 실행 가능하게 만듭니다.

chmod 700 /etc/openvpn/client-connect.sh
chmod 700 /etc/openvpn/client-disconnect.sh

다음 항목을 '/etc/rc.local'에 추가합니다(/etc/sysctl.conf에서 적절한 sysctls를 수정할 수도 있음).

echo 1 >/proc/sys/net/ipv6/conf/all/proxy_ndp
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
/etc/init.d/firewall stop && /etc/init.d/firewall start

이러한 항목은 이웃 검색 및 전달을 활성화합니다. 방화벽도 추가했습니다.

'/etc/init.d/firewall'을 생성하고 다음 내용을 입력합니다.

#!/bin/sh
description: Firewall
IPT=/sbin/iptables
IPT6=/sbin/ip6tables
case "$1" in
start)
$IPT -F INPUT
$IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$IPT -A INPUT -i eth0 -p icmp -j ACCEPT
$IPT -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
$IPT -A INPUT -i tap+ -j ACCEPT
$IPT -A FORWARD -i tap+ -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -F POSTROUTING
$IPT -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
$IPT -A INPUT -i eth0 -j DROP
$IPT6 -F INPUT
$IPT6 -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT6 -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$IPT6 -A INPUT -i eth0 -p icmpv6 -j ACCEPT
$IPT6 -A FORWARD -s 2a00:dd80:003d:000c::/64 -i tap0 -o eth0 -j ACCEPT
$IPT6 -A INPUT -i eth0 -j DROP
exit 0
;;
stop)
$IPT -F
$IPT6 -F
exit 0
;;
*)
echo "Usage: /etc/init.d/firewall {start|stop}"
exit 1
;;
esac

'/etc/rc.local'을 실행하고 방화벽을 시작합니다.

sh /etc/rc.local

이로써 서버측 수정이 완료되었습니다.

클라이언트에서 OpenVPN으로 IPv6 작동하기

클라이언트 구성 파일 '/etc/openvpn/client.conf'의 마지막 줄에 다음을 추가합니다.

create the ipv6 tunnel
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh
need this so when the client disconnects it tells the server
explicit-exit-notify

클라이언트가 OpenVPN 서버에 연결/연결 해제될 때마다 업 및 다운 스크립트는 클라이언트 tap0 연결의 IPV6 클라이언트 끝점을 구축/파괴합니다.

up.sh의 내용은 다음과 같습니다.

#!/bin/bash
IPV6BASE="2a00:dd80:3d:c"
ifconfig $dev up
ifconfig $dev add ${IPV6BASE}:1001::2/64
ip -6 route add default via ${IPV6BASE}:1001::1
exit 0

스크립트는 IPV6 주소 2a00:dd80:3d:c:1001::2를 클라이언트 IPV6 주소로 할당하고 서버를 통해 기본 IPV6 경로를 설정합니다.

서버 구성에서 IPV6BASE를 BASERANGE와 동일하게 수정합니다.

down.sh의 내용은 다음과 같습니다.

#!/bin/bash
IPV6BASE="2a00:dd80:3d:c"
/sbin/ip -6 addr del ${IPV6BASE}::2/64 dev $dev
/sbin/ip link set dev $dev down
/sbin/ip route del ::/0 via ${IPV6BASE}::1
exit 0

이는 클라이언트의 IPV6 주소를 삭제하고 클라이언트가 서버에서 연결을 끊을 때 IPV6 경로를 해제합니다.

서버 구성에서 IPV6BASE를 BASERANGE와 동일하게 수정하고 스크립트를 실행 가능하게 만듭니다.

chmod 700 /etc/openvpn/up.sh
chmod 700 /etc/openvpn/down.sh

선택적으로 '/etc/resolv.conf'를 수정하고 DNS 확인을 위해 Google의 IPV6 이름 서버를 추가합니다.

nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844

서버에서 openvpn을 다시 시작한 다음 클라이언트에서 연결하세요. 연결되어 있어야 합니다. OpenVPN을 통한 IPV6 연결이 작동하는지 확인하려면 test-ipv6.com을 방문하세요.

참조 링크

OpenVPN 홈페이지

출처: 스타브로프스키