Debian 7의 OpenVPN 서버 및 클라이언트 설치 및 구성
이 문서에서는 Debian Linux를 사용하여 OpenVPN에서 IPv6 연결을 얻는 방법을 자세히 설명합니다. 이 프로세스는 서버로 IPv6 연결을 사용하는 KVM VPS의 Debian 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 RAM 및 1GB 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
다음과 같이 인증서를 클라이언트 및 서버 시스템에 복사합니다.
- 클라이언트와 서버 모두에 ca.crt가 있는지 확인하세요.
- ca.key 키는 클라이언트에 있어야 합니다.
- 서버에는 server.crt, dh4096.pem, server.key 및 ta.key가 필요합니다.
- client.crt, client.key 및 ta.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 홈페이지
출처: 스타브로프스키