Hướng dẫn VPN Client to Site with OpenVPN on CentOS


VPN Client to Site on CentOS with OpenVPN

Hướng dẫn VPN Client to Site with OpenVPN on CentOS


Mô tả:


User (VPN Client) từ bên ngoài hệ thống thực hiện quay VPN đến Server OpenVPN theo cơ chế chứng thực Certificate dùng Key + Password bảo vệ Key (khác với Password của Key nha).

Quá trình kết nối VPN thành công:

- 1 đường hầm (Tunnel ảo) có Subnet 10.8.0.0/24 được tạo ra, VPN Client sẽ kết nối đến hệ thống mạng công ty theo đường hầm này. (bảo mật )
- VPN Client sẽ được Server cấp phát 1 địa chỉ IP tĩnh thuộc subnet 10.8.0.0/24 để có thể giao tiếp với các Local Computer bên trong hệ thống.

Bước 0: Chuẩn bị

Thiết lập, đặt IP theo mô hình.





Đảm bảo: Local Computer kết nối được với OpenVPN Server
VPN Client kết nối của OpenVPN Server (để quay VPN)
Softs: OpenVPN GUI: cài đặt trên VPN Client dùng để quay VPN đến Server
Gói lzo: cài đặt trên Server dùng để nén dữ liệu trên đường truyền
Gói openvpn: cài đặt trên Server làm OpenVPN Server.

Các softs này có thể download trên trang chủ hoặc mình đã để sẵn ở đây
http://www.mediafire.com/?ir9fdp8nybzcy8n

Bước 1: Cài đặt VPN Server

- Copy các gói cài đặt lzo-1.08, openvpn-2.0.9 vào thư mục cá nhân của root (/root)



cd /root
Giải nén và cài lzo-1.08
tar –xvzf lzo-1.08.tar.gz
cd lzo-1.08
./configure (kiểm tra các thư viện đã đủ chưa)
make (thực hiện biên dịch)
make install (thực hiện cài đặt)
Giải nén và cài đặt openvpn :
cd ..
tar -xzvf openvpn-2.0.9.tar.gz
cd openvpn-2.0.9
./configure
make
make install

- Tạo thư mục /etc/openvpn:
mkdir /etc/openvpn

Bước 2: Tạo CA Certificate Server và Key

- Copy thư mục easy-rsa từ thư mục giải nén vào /etc/openvpn 
cp -r /root/openvpn-2.0.9/easy-rsa/ /etc/openvpn/



- Tạo CA Certifiacte Server:

cd /etc/openvpn/easy-rsa/2.0/
mv * ../ (move toàn bộ file trong thư mục 2.0/ ra thư mục easy-rsa/)



cd .. (chuyển đến thư mục easy-rsa/)

mkdir keys (tạo thư mục /etc/openvpn/easy-rsa/keys để chứa keys, certificate)
vi vars (sửa các thông số mặc định hoặc có thể bỏ qua bước này, dùng thông số mặc định)

export KEY_COUNTRY="VN"
export KEY_PROVINCE="TP HCM"
export KEY_CITY="HCM"
export KEY_ORG="Nhat Nghe"
export KEY_EMAIL=openvpn@nhatnghe.com


- Cấu hình CA:
. ./vars ; chú ý có 1 khoảng trắng giữa 2 dấu chấm (dùng khởi tạo các biến môi trường đã thiết lập ở bước trên)
Khi chạy lệnh này, yêu cầu hệ thống là không có file nào trong thư mục keys cả, sẽ hiện ra dòng thông báo chạy lệnh ./clean-all để xóa trống thư mục /etc/openvpn/easy-rsa/keys nếu có.
./clean-all



- Tạo CA server: Tạo private key lưu trong file 'ca.key' cho CA
./build-ca, nhập các thông số vào, lưu ý: phần common name là xác định duy nhất do đó cần nhớ phần này.



ls thư mục keys sẽ thấy có các file được tạo ra



Các key này đều được mã hóa, có thể cat ra xem có gì trong đó cho zui

- Tạo certificate và private key cho server (xin CA cho server)
Ở bước trên chúng ta đã tạo CA Server tương tự như server của các tổ chức bán Certificate (Verizon,…), trong bước này ta sẽ tạo Private Key cho các server có nhu cầu sử dụng việc chứng thực bằng Certificate (các ngân hàng, ..) ở đây server chúng ta là OpenVPN.
./build-key-server openvpnserver



ls keys/ ra xem có thêm vài file được tạo ra 



- Tạo Diffie Hellman ( DH ): băm keys
./build-dh
Quá trình băm keys có thể diễn ra nhanh hay chậm.

- Tạo Client Certificate và Private key cho Client (để thực hiện chứng thực 2 chiều). Ở đây mình tạo 2 keys cho 2 user kuti và kuteo
./build-key kuti (common name: kuti)



Tương tự tạo thêm cho kuteo
./build-key kuteo (common name: kuteo)
Xong bước này là chúng ta đã hoàn thành việc tạo các Certificate và Keys cần thiết cho việc chứng thực
ls keys/ ra xem kết quả ở bước này



Chúng ta có khá nhiều file trong thư mục keys/ này, các keys này sẽ được phân bố đến server, clients hợp lý theo như bảng bên dưới:



Bước 3: Cấu hình chức năng Forwarding (dùng để thực hiện Lan Routing)

vi /etc/sysctl.conf
7: net.ipv4.ip_forward = 1
sysctl –p (để cho các thông số có hiệu lực)
echo 1 > /proc/sys/net/ipv4/ip_forward

Bước 4: Cấu hình VPN Server

- Copy file cấu hình server.conf mẫu từ source cài đặt vào /etc/openvpn/
cp /root/openvpn-2.0.9/sample-config-files/server.conf /etc/openvpn/
- Chỉnh sửa file cấu hình:
cd /etc/openvpn/
vi server.conf


25: local 192.168.1.200 (chọn card mạng user quay VPN đến, có thể không cần option này)
32: port 1723 (default là 1194, thường port này bị firewall block nên đặt 1723 cho giống port VPN Server của Windows Server)
36: proto udp (protocol udp)
53: dev tun (dùng tunnel, nếu dùng theo bridge chọn dev tap0 và những config khác sẽ khác với tunnel)
78: ca /etc/openvpn/easy-rsa/keys/ca.crt (khai báo đuờng dẫn cho file ca.crt)
79: cert /etc/openvpn/easy-rsa/keys/openvpnserver.crt
80: key /etc/openvpn/easy-rsa/keys/openvpnserver.key
87: dh /etc/openvpn/easy-rsa/keys/dh1024.pem
96: server 10.8.0.0 255.255.255.0 (khai báo dãy IP cần cấp cho VPN Client, mặc định VPN Server sẽ lấy IP đầu tiên – 10.8.0.1)
103: ;ifconfig-pool-persist ipp.txt (dùng để cho VPN Client lấy lại IP trước đó nếu bị đứt kết nối với VPN server, do chúng ta dùng IP tĩnh nên không sử dụng thông số này)
124: push “route 172.16.0.0 255.255.255.0” (lệnh này sẽ đẩy route mạng 172.16.0.0 đến Client, hay còn gọi là Lan Routing trong Windows Server, giúp cho VPN Client thấy được mạng bên trong của công ty)
125: ;push “route 192.168.1.200 255.255.255.0” do bài Lab của chúng ta VPN Client đã connect đến được network 192.168.1.0 nên không cần add route dòng này (nếu có sẽ không chạy được)
,chỉ cần add route các lớp mạng bên trong công ty mà Client bên ngoài không connect được)
138: client-config-dir ccd (dùng để khai báo cấp IP tĩnh cho VPN Client)
196: client-to-client (cho phép các VPN client nhìn thấy nhau, mặc định client chỉ thấy server)

Cũng khá đơn giản nhỉ, ngoài ra còn cónhững thông số khác không dùng đến như:
181 ;push “redirect-gateway” (mọi traffic của VPN Client – http, dns, ftp, … đều thông qua đuờng Tunnel. Khác với lệnh push route, chỉ những traffic đi vào mạng nội bộ mới thông qua Tunnel, khi dùng lệnh này yêu cầu bên trong mạng nội bộ cần có NAT Server, DNS Server)
187, 188: push “dhcp-option DNS (WINS) 10.8.0.1” đẩy DNS or WINS config vào VPN Client

Mọi người cứ nghĩ lệnh push sẽ áp config từ server đến VPN Client. Khi quay VPN thành công, Client sẽ được VPN Server add những thông số config này.

- Cấu hình file IP tĩnh tương ứng với từng User:
Sau khi đã cấu hình server, tiếp đó ta sẽ cấu hình các file đặt trong thư mục cdd/ tương ứng với từng User VPN.

+ Tạo thư mục ccd (/etc/openvpn/ccd)
mkdir /etc/openvpn/ccd
+ Tạo profile cho user kuti
vi /etc/openvpn/ccd/kuti
1: ifconfig-push 10.8.0.2 10.8.0.1 



theo file cấu hình trên user kuti sẽ nhận IP là 10.8.0.2

Cặp IP khai báo trong lệnh trên phải thuộc bảng bên dưới, ứng với mỗi user sẽ có 1 cặp ip tương ứng.



Còn lý do thuộc bảng trên, các bạn tham khảo ở đây: http://openvpn.net/index.php/open-so...to.html#policy

+ Tạo profile cho user kuteo
vi /etc/openvpn/ccd/kuteo
1: ifconfig-push 10.8.0.6 10.8.0.5 
theo file cấu hình trên user kuti sẽ nhận IP là 10.8.0.6

Các bạn có thể thấy hạn chế của việc đặt IP theo bảng trên là ở Subnet 10.8.0.0/24 ta chỉ có thể config IP tĩnh cho 64 user (tương ứng với 64 cặp IP ở trên). Nếu trong công ty có nhiều hơn 64 user sử dụng VPN , chúng ta sẽ tạo thêm 1 subnet nữa, chẳng hạn 10.9.0.0 và add route thêm mạng này vào file server.conf ở trên.

Bước 5: Start VPN Server và tiến hành quay VPN, test với các user kuti, kuteo.

- Start OpenVPN Server
cd /etc/openvpn
openvpn server.conf




- Cài đặt, config OpenVPN GUI cho Client
+ Chạy file openvpn-2.0.9-gui-1.0.3-install.exe, cài đặt mặc định.
+ Chép các file key, certificate cần thiết ca.crt, kuti.crt, kuti.key vào đường dẫn C:\Program Files\OpenVPN\config
+ Copy file client.ovpn từ đường dẫn C:\Program Files\OpenVPN\sample-config vào C:\Program Files\OpenVPN\config



+ Edit file client.ovpn:

client
dev tun (tunnel)
proto udp (upd protocol)
remote 192.168.1.200 1723 (khai báo IP:Port server OpenVPN)
nobind
persist-key
persist-tun
ca ca.crt (khai báo CA server)
cert kuti.crt (certificate user kuti)
key kuti.key (private key kuti)
comp-lzo
verb 3

- Quay VPN
Right Click vào biểu tượng Card mạng mới sau khi cài OpenVPN GUI, chọn Connects



Các bạn có thể thấy đã quay VPN thành công, nhận IP 10.8.0.2, các route cần thiết cũng được add vào.

- Set password bảo vệ Key: 


Right click vào Icon OpenVPN  Chọn Change Password



Sau này khi quay VPN, hệ thống sẽ yêu cầu thêm password này nữa.



- Test:
+ Kiểm tra Route print: start --> run --> cmd --> route print



Ok, đã thấy server đã add route cho client kuti 2 mạng 172.16.0.0/24 và 192.168.1.0/24, các bạn có thể thấy 2 mạng này đều đi qua Gateway có IP: 10.8.0.1 – IP Tunnel của VPN Server - với metric 1.

+ Kiểm tra kết nối với mạng bên trong bằng lệnh ping.



+ Quay VPN với user kuteo
Làm các bước tương tự như user kuti



User kuteo đã nhận IP: 10.8.0.6 như đã cấu hình trong file /etc/openvpn/ccd/kuteo ở trên.

+ Ping đến VPN Client 1 (kuti: 10.8.0.2) và Local Computer (172.16.0.2)



Như vậy chúng ta đã hoàn thành bài Lab này.
Hi vọng mọi người đều làm được, nếu bị lỗi hoặc không hiểu lắm ở bước nào:
- Xem hướng dẫn, giải thích full ở: http://openvpn.net/howto.html
- Post lên mình sẽ cố gắng trả lời (nếu được ).

Còn 1 phần nhỏ (làm thêm) nữa trong bài Lab này, mình sẽ cập nhật sau 

Bài viết khá dài (dòng) anh em đọc từ từ nhé.
__________________
ACNA, CCNA, MCSA, MCSE, LPI

thay đổi nội dung bởi: tindecken, hôm nay lúc 21:01.

0 nhận xét:

Đăng nhận xét