ค้นหาเว็บไซต์

การติดตั้งและกำหนดค่าเซิร์ฟเวอร์ OpenVPN และไคลเอนต์บน Debian 7


บทความนี้ให้รายละเอียดวิธีการรับการเชื่อมต่อ IPv6 บน OpenVPN โดยใช้ Debian Linux กระบวนการนี้ได้รับการทดสอบบน Debian 7 บน KVM VPS ที่มีการเชื่อมต่อ IPv6 เป็นเซิร์ฟเวอร์ และเดสก์ท็อป Debian 7 คำสั่งจะต้องรันในฐานะรูท

OpenVPN คืออะไร?

OpenVPN เป็นโปรแกรม VPN ที่ใช้ SSL/TLS เพื่อสร้างการเชื่อมต่อ VPN ที่ปลอดภัยและเข้ารหัส เพื่อกำหนดเส้นทางการรับส่งข้อมูลอินเทอร์เน็ตของคุณ จึงป้องกันการสอดแนม Open VPN มีความสามารถสูงในการเคลื่อนที่ผ่านไฟร์วอลล์อย่างโปร่งใส ในความเป็นจริง หากสถานการณ์ต้องการ คุณสามารถรันบนพอร์ต TCP เดียวกันกับ HTTPS (443) ซึ่งทำให้การรับส่งข้อมูลแยกไม่ออกและแทบเป็นไปไม่ได้เลยที่จะบล็อก

OpenVPN สามารถใช้วิธีการต่างๆ มากมาย เช่น รหัสลับที่แชร์ล่วงหน้า ใบรับรอง หรือชื่อผู้ใช้/รหัสผ่าน เพื่อให้ไคลเอ็นต์ตรวจสอบสิทธิ์กับเซิร์ฟเวอร์ OpenVPN ใช้โปรโตคอล OpenSSL และใช้คุณสมบัติด้านความปลอดภัยและการควบคุมมากมาย เช่น การรับรองความถูกต้องในการตอบสนองต่อความท้าทาย ความสามารถในการลงชื่อเข้าระบบครั้งเดียว คุณสมบัติการปรับสมดุลโหลดและเฟลโอเวอร์ และการสนับสนุน multi daemon

เหตุใดจึงต้องใช้ OpenVPN?

คิดถึงการสื่อสารที่ปลอดภัย - คิดถึง OpenVPN หากคุณไม่ต้องการให้ใครสอดแนมการรับส่งข้อมูลอินเทอร์เน็ตของคุณ ให้ใช้ OpenVPN เพื่อกำหนดเส้นทางการรับส่งข้อมูลทั้งหมดของคุณผ่านอุโมงค์ที่มีการเข้ารหัสสูงและปลอดภัย

นี่เป็นสิ่งสำคัญอย่างยิ่งเมื่อเชื่อมต่อกับเครือข่าย WiFi สาธารณะในสนามบินและสถานที่อื่นๆ คุณไม่สามารถแน่ใจได้ว่าใครกำลังสอดแนมการเข้าชมของคุณ คุณสามารถช่องทางการรับส่งข้อมูลของคุณผ่านเซิร์ฟเวอร์ OpenVPN ของคุณเองเพื่อป้องกันการสอดแนม

หากคุณอยู่ในประเทศใดก็ตามที่ติดตามการเข้าชมและบล็อกเว็บไซต์เป็นประจำ คุณสามารถใช้ OpenVPN ผ่านพอร์ต TCP 443 เพื่อทำให้แยกไม่ออกจากการรับส่งข้อมูล HTTPS คุณยังสามารถรวม OpenVPN เข้ากับกลยุทธ์ความปลอดภัยอื่น ๆ เช่น ช่องทางการรับส่งข้อมูล OpenVPN ของคุณผ่านช่องทาง SSL เพื่อเอาชนะเทคนิค Deep Packet Inspection ที่อาจระบุลายเซ็น OpenVPN ได้

ความต้องการของระบบ

OpenVPN ต้องการข้อกำหนดขั้นต่ำมากในการทำงาน ระบบที่มี 64 MB RAM และพื้นที่ 1 GB HDD ก็เพียงพอที่จะเรียกใช้ OpenVPN OpenVPN ทำงานบนระบบปฏิบัติการหลักเกือบทั้งหมด

การติดตั้งและกำหนดค่า OpenVPN บน Debian 7

ติดตั้ง 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.key และ ta.key
  4. 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

ใช้โปรแกรมแก้ไขข้อความ ตั้งค่าการกำหนดค่าไคลเอนต์ OpenVPN ใน '/etc/openvpn/client.conf' บนไคลเอนต์ ตัวอย่างการกำหนดค่ามีดังนี้:

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 ต่อไปนี้คือวิธีทำให้ IPv6 ทำงานบน OpenVPN

การรับ IPv6 ทำงานร่วมกับ OpenVPN บนเซิร์ฟเวอร์

เพิ่มบรรทัดต่อไปนี้ที่ส่วนท้ายของไฟล์การกำหนดค่าเซิร์ฟเวอร์ '/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

โฮสต์ของฉันกำหนดที่อยู่ IPV6 ให้ฉันจากบล็อก 2a00:dd80:003d:000c::/64 ดังนั้นฉันจึงใช้
2a00:dd80:003d:000c เป็นฐาน แก้ไขค่านี้ตามที่โฮสต์ของคุณกำหนดให้คุณ

แต่ละครั้งที่ไคลเอนต์เชื่อมต่อกับ OpenVPN สคริปต์นี้จะกำหนดที่อยู่ 2a00:dd80:003d:000c:1001::1 เป็นที่อยู่ IPV6 ของ tap0< อินเทอร์เฟซของเซิร์ฟเวอร์

บรรทัดสุดท้ายตั้งค่า Neighbor Discovery สำหรับอุโมงค์ของเรา ฉันได้เพิ่มที่อยู่ IPv6 ของการเชื่อมต่อฝั่งไคลเอ็นต์ tap0 เป็นที่อยู่พร็อกซี

นี่คือเนื้อหาของ 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' (คุณยังสามารถแก้ไข sysctls ที่เหมาะสมได้ใน /etc/sysctl.conf)

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

การดำเนินการแก้ไขฝั่งเซิร์ฟเวอร์เสร็จสมบูรณ์

รับ IPv6 ทำงานกับ OpenVPN บนไคลเอนต์

เพิ่มข้อมูลต่อไปนี้เป็นบรรทัดสุดท้ายของไฟล์การกำหนดค่าไคลเอนต์ของคุณ '/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

สคริปต์ขึ้นและลงสร้าง/ทำลายจุดสิ้นสุดไคลเอ็นต์ IPV6 ของการเชื่อมต่อไคลเอ็นต์ tap0 ทุกครั้งที่ไคลเอ็นต์เชื่อมต่อ/ยกเลิกการเชื่อมต่อไปยังหรือจากเซิร์ฟเวอร์ OpenVPN

นี่คือเนื้อหาของ 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' และเพิ่มเนมเซิร์ฟเวอร์ IPV6 ของ Google สำหรับการแก้ไข DNS

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

รีสตาร์ท openvpn บนเซิร์ฟเวอร์แล้วเชื่อมต่อจากไคลเอนต์ คุณควรจะเชื่อมต่อ ไปที่ test-ipv6.com เพื่อดูว่าการเชื่อมต่อ IPV6 ของคุณผ่าน OpenVPN ใช้งานได้

ลิงค์อ้างอิง

หน้าแรกของ OpenVPN

ที่มา: สตาฟรอฟสกี้