دو دستگاه باید از مسیری رمز‌شده به هم برسند. امشب یک OpenVPN کوچک با گواهی می‌سازیم و تا ping داخل تونل پیش می‌رویم؛ اتصال VPN را با دسترسی آزاد به تمام شبکه یکی نمی‌گیریم.

این جلسه بخشی از دورهٔ لینوکس ۳۰۳ در ۴۰ شب است.

محیط تمرین: srv و client Ubuntu 24.04؛ OpenVPN 2.6؛ گواهی‌های serverAuth و clientAuth شب‌های پنجم و هفتم؛ Snapshot پایه.

جایگاه در دوره: هدف‌های 334.4 آزمون 303-300.

routed و bridged دو طراحی متفاوت‌اند#

TUN برای حمل بسته‌های IP و طراحی routed است؛ TAP می‌تواند فریم لایهٔ دوم را حمل کند. عبور broadcast و توسعهٔ یک LAN، هزینه و سطح حملهٔ متفاوتی دارد. تمرین ما TUN و یک subnet تونلی مستقل 10.30.0.0/24 است؛ هنوز full tunnel اینترنت یا اتصال تمام شعبه را نمی‌سازیم.

روی هر دو VM بستهٔ openvpn را نصب کن. روی srv در /etc/openvpn/server/ فایل‌های lab-ca.crt، lab-server.crt و lab-server.key را از PKI آزمایشگاه نصب کن؛ کلید خصوصی با مجوز 600 و مالک root. کلید CA به هیچ peer منتقل نمی‌شود.

sudo openvpn --genkey secret /etc/openvpn/server/lab-tls-crypt.key
sudo chmod 600 /etc/openvpn/server/lab-tls-crypt.key

کلید tls-crypt را از کانال امن به client هم منتقل کن؛ این کلید با private key گواهی فرق دارد. روی سرور lab.conf:

port 1194
proto udp
dev tun
topology subnet
server 10.30.0.0 255.255.255.0
ca /etc/openvpn/server/lab-ca.crt
cert /etc/openvpn/server/lab-server.crt
key /etc/openvpn/server/lab-server.key
dh none
tls-version-min 1.2
remote-cert-tls client
tls-crypt /etc/openvpn/server/lab-tls-crypt.key
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
keepalive 10 60
persist-key
persist-tun
verb 3

روی client، گواهی client.crt، کلید خودش و CA و tls-crypt را در /etc/openvpn/client/ با نام‌های همین نمونه نصب کن و lab.conf بساز:

client
proto udp
dev tun
remote 192.168.56.10 1194
nobind
ca /etc/openvpn/client/lab-ca.crt
cert /etc/openvpn/client/lab-client.crt
key /etc/openvpn/client/lab-client.key
remote-cert-tls server
verify-x509-name library.example.test name
tls-version-min 1.2
tls-crypt /etc/openvpn/client/lab-tls-crypt.key
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
verb 3

نام گواهی سرور در دوره library.example.test است؛ اگر گواهی دیگری ساخته‌ای، انتظار نام باید با همان هویت سازگار باشد. compression را فعال نمی‌کنیم. در lab با فایروال فعال، UDP/1194 از client و ترافیک مجاز خود تونل باید اجازه داشته باشند.

sudo systemctl start openvpn-server@lab

این فرمان روی srv است؛ روی client از sudo systemctl start openvpn-client@lab استفاده کن. نام unitهای بسته را با systemctl list-unit-files 'openvpn*' تأیید کن.

چهار شاهد پایان تمرین#

لاگ دو طرف، آدرس TUN، route و ping 10.30.0.1 از client را ثبت کن. با گواهی CA نامعتبر یا client منقضی، اتصال باید شکست بخورد. interface بالا بدون تبادل داده می‌تواند مشکل route یا policy داشته باشد. دسترسی به LAN پشت سرور به forwarding، route برگشت و policy جدا نیاز دارد؛ این تمرین آن را خودکار فراهم نمی‌کند.

پایان: unitهای آزمایشگاهی را stop کن. اگر به سایت‌به‌سایت توسعه دادی، routeهای اختصاصی و iroute سمت سرور را مطابق topology بررسی کن. مرجع: راهنمای OpenVPN 2.6 .