Cách cài đặt Tinc và thiết lập VPN cơ bản trên Ubuntu 18.04
Tinc là một daemon Mạng riêng ảo (VPN) open-souce với các tính năng hữu ích như mã hóa, nén tùy chọn và định tuyến lưới tự động có thể định tuyến lưu lượng VPN trực tiếp giữa các server . Các tính năng này phân biệt tinc với các giải pháp VPN khác và làm cho nó trở thành lựa chọn tốt để tạo VPN từ nhiều mạng nhỏ, phân tán theo địa lý.Trong hướng dẫn này, ta sẽ giới thiệu cho các bạn cách sử dụng tinc để tạo một VPN an toàn mà trên đó các server của bạn có thể giao tiếp như thể chúng ở trên một mạng local . Ta cũng sẽ trình bày cách sử dụng tinc để cài đặt một tunnel an toàn vào một mạng riêng. Ta sẽ sử dụng server Ubuntu 18.04, nhưng các cấu hình có thể được điều chỉnh để sử dụng với bất kỳ hệ điều hành nào khác.
Bàn thắng
Để đề cập đến nhiều trường hợp sử dụng, hướng dẫn này phác thảo cách kết nối một nút khách với VPN qua network interface riêng và một nút khác qua giao diện công cộng. Tuy nhiên, bạn có thể điều chỉnh cài đặt này cho phù hợp với nhu cầu của riêng mình. Bạn chỉ cần lập kế hoạch về cách bạn muốn các server của bạn truy cập lẫn nhau và điều chỉnh các ví dụ được trình bày trong hướng dẫn này theo nhu cầu của bạn . Nếu bạn đang điều chỉnh điều này cho phù hợp với cài đặt của bạn , hãy đảm bảo thay thế các giá trị được đánh dấu trong các ví dụ bằng các giá trị của bạn . Tuy nhiên, bạn có thể quan tâm đến việc làm theo hướng dẫn trước khi nó được viết đảm bảo rằng bạn hiểu các thành phần và quy trình liên quan trước khi sửa đổi các hướng dẫn này.
Để giúp mọi thứ rõ ràng, hướng dẫn này sẽ đề cập đến các server như sau:
- server-01 : Tất cả các node VPN sẽ kết nối với máy này và kết nối phải được duy trì để có chức năng VPN phù hợp. Các server bổ sung có thể được cấu hình theo cách tương tự như server này để cung cấp dự phòng, nếu muốn
- client-01 : Kết nối với nút VPN server -01 bằng network interface riêng của nó
- client-02 : Kết nối với nút VPN server -01 qua network interface công cộng
 Lưu ý : Bản thân Tinc không phân biệt giữa  server  (máy lưu trữ và cung cấp dịch vụ VPN) và client  (máy kết nối và sử dụng mạng riêng an toàn), nhưng có thể hữu ích nếu bạn hiểu và hình dung cách thức hoạt động của tinc bằng cách nghĩ đến  server  của bạn như thế này.
Đây là sơ đồ của VPN mà ta muốn cài đặt :
Hộp màu xanh đại diện cho VPN của ta và màu hồng đại diện cho mạng riêng bên dưới. Cả ba server đều có thể giao tiếp trên VPN, ngay cả khi mạng riêng không thể truy cập vào máy khách-02 .
Yêu cầu
 Nếu bạn muốn làm theo chính xác hướng dẫn này, hãy cung cấp hai  server  Ubuntu 18.04 (  server -01 và máy khách-01 ) trong cùng một trung tâm dữ liệu và bật mạng riêng trên mỗi  server . Sau đó, tạo một  server  Ubuntu 18.04 khác ( client-02 ) trong một trung tâm dữ liệu riêng biệt. Mỗi  server  phải có một  admin-user  và một firewall  được  cấu hình  với ufw . Để  cài đặt  điều này, hãy làm theo hướng dẫn  cài đặt   server  ban đầu của  ta  cho Ubuntu 18.04 .
 Ngoài ra, ở phần sau của hướng dẫn này,  ta   cần  chuyển một vài file  giữa mỗi máy bằng scp .Do đó, bạn  cần  tạo SSH key  trên mỗi  server   của bạn , thêm cả SSH key  của máy khách 01 và máy khách-02 vào file  authorized_keys của  server -01 , sau đó thêm SSH key  của  server -01 cho cả file  tin authorized_keys của máy khách-01 và máy khách-02 . Để được trợ giúp  cài đặt  điều này, hãy xem hướng dẫn của  ta  về Cách  cài đặt  SSH key  trên Ubuntu 18.04 .
Bước 1 - Cài đặt Tinc
Tinc có sẵn từ repository Ubuntu APT mặc định, nghĩa là ta có thể cài đặt nó chỉ bằng một vài lệnh.
Nếu gần đây bạn chưa làm như vậy, hãy chạy lệnh sau trên mỗi server để cập nhật index gói tương ứng của chúng:
- sudo apt update 
Sau đó cài đặt tinc trên mỗi server bằng cách chạy lệnh sau:
- sudo apt install tinc 
Như vậy, bạn đã cài đặt tinc trên mỗi server của bạn . Tuy nhiên, bạn cần thực hiện một số thay đổi đối với cấu hình của tinc trên mỗi máy để VPN của bạn hoạt động. Hãy bắt đầu với việc cập nhật server -01 .
Bước 2 - Cấu hình Server Tinc
Tinc yêu cầu mọi máy tính là một phần của VPN phải có ba thành phần cấu hình sau:
-  Tệp cấu hình tinc : Có ba file  riêng biệt  cấu hình  daemon tinc:-  tinc.conf, xác định tên mạng, thiết bị mạng mà VPN sẽ chạy và các tùy chọn VPN khác;
-  tinc-up, một tập lệnh kích hoạt thiết bị mạng được xác định trongtinc.confsau khi tinc được khởi động;
-  tinc-down, hủy kích hoạt thiết bị mạng khi nào tinc dừng.
 
-  
- Cặp public key / riêng tư : Tinc sử dụng các cặp public key / riêng tư đảm bảo rằng chỉ những user có khóa hợp lệ mới có thể truy cập VPN.
- Tệp cấu hình server : Mỗi máy (hoặc server ) trên VPN có file cấu hình riêng chứa địa chỉ IP thực của server và mạng con nơi tinc sẽ phục vụ nó
 Tinc sử dụng tên mạng để phân biệt một VPN tinc với một VPN khác. Điều này hữu ích trong trường hợp bạn muốn  cài đặt  nhiều VPN, nhưng bạn nên sử dụng tên mạng ngay cả khi bạn chỉ  cấu hình  một VPN. Bạn có thể đặt cho VPN  của bạn  bất kỳ tên mạng nào bạn thích, nhưng để đơn giản hơn,  ta  sẽ gọi tên mạng VPN của netname .
Trên server -01 , tạo cấu trúc folder cấu hình cho VPN:
- sudo mkdir -p /etc/tinc/netname/hosts 
Sử dụng editor   bạn muốn  để tạo file  tinc.conf . Ở đây,  ta  sẽ sử dụng nano :
- sudo nano /etc/tinc/netname/tinc.conf 
Thêm các dòng sau vào file  trống. Các cấu hình này cấu hình một nút tinc có tên server_01 với  network interface  được gọi là tun0 sẽ sử dụng IPv4:
Name = server_01 AddressFamily = ipv4 Interface = tun0 Cảnh báo: Lưu ý cách giá trị sau chỉ thị Name bao gồm dấu gạch dưới ( _ ) thay vì dấu gạch ngang ( - ). Điều này rất quan trọng, vì tinc yêu cầu giá trị Name chỉ chứa các ký tự chữ và số hoặc dấu gạch dưới. Nếu bạn sử dụng dấu gạch ngang ở đây, bạn sẽ gặp lỗi khi cố khởi động VPN sau trong hướng dẫn này.
  Lưu file   sau khi thêm các dòng này. Nếu bạn sử dụng nano , hãy làm như vậy bằng cách nhấn CTRL+X , Y , sau đó ENTER .
 Tiếp theo, tạo file  cấu hình  server  có tên server_01 trong folder  con hosts . Cuối cùng,  các node  client  sẽ sử dụng file  này để giao tiếp với  server -01 :
- sudo nano /etc/tinc/netname/hosts/server_01 
  , hãy  lưu ý  tên của file  này chứa dấu gạch dưới chứ không phải dấu gạch nối. Bằng cách này, nó phù hợp với chỉ thị Name trong file  tinc.conf , điều này sẽ cho phép tinc tự động nối khóa RSA công khai của  server  vào file  này khi  ta  tạo sau này.
Thêm các dòng sau vào file , đảm bảo bao gồm địa chỉ IP công cộng của server -01 :
Address = server-01_public_IP_address Subnet = 10.0.0.1/32 Trường Address định cách  các node  khác sẽ kết nối với  server  này và Subnet chỉ định mạng con mà daemon này sẽ phục vụ. Lưu và đóng  file .
Tiếp theo, tạo một cặp khóa RSA công khai và riêng tư cho server này bằng lệnh sau:
- sudo tincd -n netname -K4096 
Sau khi chạy lệnh này, bạn sẽ được yêu cầu nhập tên file nơi tinc sẽ lưu các khóa RSA công khai và riêng tư:
Output. . . Please enter a file to save private RSA key to [/etc/tinc/netname/rsa_key.priv]:  Please enter a file to save public RSA key to [/etc/tinc/netname/hosts/server_01]:  Nhấn ENTER để chấp nhận các vị trí mặc định tại mỗi  dấu nhắc ; làm như vậy sẽ yêu cầu tinc lưu trữ private key  trong một file  có tên rsa_key.priv và nối public key  vào file  cấu hình  server  server_01 .
 Tiếp theo, tạo tinc-up , tập lệnh sẽ chạy  khi  nào VPN netname được khởi động:
- sudo nano /etc/tinc/netname/tinc-up 
Thêm các dòng sau:
#!/bin/sh ip link set $INTERFACE up ip addr add 10.0.0.1/32 dev $INTERFACE ip route add 10.0.0.0/24 dev $INTERFACE Đây là những gì mỗi dòng này làm:
-  ip link …: cài đặt trạng thái của network interface ảo của tinc làup
-  ip addr …: thêm địa chỉ IP10.0.0.1với mặt nạ mạng32vào network interface ảo của tinc, điều này sẽ khiến các máy khác trên VPN xem địa chỉ IP của server -01 là10.0.0.1
-  ip route …: thêm một tuyến đường (10.0.0.0/24) có thể truy cập được trên network interface ảo của tinc
Lưu file sau khi thêm các dòng này.
Tiếp theo, tạo một tập lệnh để xóa network interface ảo khi VPN của bạn bị dừng:
- sudo nano /etc/tinc/netname/tinc-down 
Thêm các dòng sau:
#!/bin/sh ip route del 10.0.0.0/24 dev $INTERFACE ip addr del 10.0.0.1/32 dev $INTERFACE ip link set $INTERFACE down Những dòng này có tác động ngược lại với những dòng trong script tinc-up :
-  ip route …: xóa tuyến10.0.0.0/24
-  ip addr …: xóa địa chỉ IP10.0.0.1khỏi network interface ảo của tinc
-  ip link …: đặt trạng thái của network interface ảo của tinc là không hoạtdown
Lưu file , sau đó thực thi cả hai tập lệnh mạng mới này:
- sudo chmod 755 /etc/tinc/netname/tinc-* 
Bước cuối cùng của việc  cấu hình   server -01 , hãy thêm  luật  firewall  sẽ cho phép lưu lượng truy cập qua cổng 655 , cổng mặc định của tinc:
- sudo ufw allow 655 
server-01 hiện đã được cấu hình đầy đủ và bạn có thể chuyển sang cài đặt các node client của bạn .
Bước 3 - Cấu hình các node client
Cả hai client của bạn sẽ yêu cầu một cấu hình hơi khác so với server , mặc dù quá trình này nhìn chung sẽ khá giống nhau.
Do cài đặt mà ta đang hướng tới trong hướng dẫn này, ta sẽ cấu hình client-01 và client-02 gần như giống nhau chỉ với một số khác biệt nhỏ giữa chúng. Do đó, nhiều lệnh được đưa ra trong bước này phải được chạy trên cả hai máy. Tuy nhiên, lưu ý nếu client-01 hoặc client-02 yêu cầu một lệnh cụ thể hoặc cấu hình đặc biệt, các lệnh đó sẽ được hiển thị trong một khối lệnh màu xanh lam hoặc màu đỏ, tương ứng.
Trên cả client-01 và client-02 , sao chép cấu trúc folder mà bạn đã tạo trên server-01 :
- sudo mkdir -p /etc/tinc/netname/hosts 
Sau đó tạo file  tinc.conf :
- sudo nano /etc/tinc/netname/tinc.conf 
Thêm các dòng sau vào file trên cả hai máy:
Name = node_name AddressFamily = ipv4 Interface = tun0 ConnectTo = server_01 Đảm bảo thay thế node_name bằng tên của nút client tương ứng.   , hãy  đảm bảo  tên này sử dụng dấu gạch dưới ( _ ) thay vì dấu gạch ngang.
  Lưu ý   file  này chứa một ConnectTo chỉ trỏ đến server_01 , trong khi server-01 ‘s tinc.conf  file  không bao gồm chỉ thị này. Bằng cách không bao gồm câu lệnh ConnectTo trên  server -01 ,  nghĩa là   server -01 sẽ chỉ lắng nghe các kết nối đến. Điều này phù hợp với  cài đặt  của  ta  vì nó sẽ không kết nối với bất kỳ máy nào khác.
Lưu và đóng file .
Tiếp theo, tạo file cấu hình server lưu trữ trên mỗi nút client . , hãy đảm bảo tên file được viết bằng dấu gạch dưới thay vì dấu gạch nối:
- sudo nano /etc/tinc/netname/hosts/node_name 
Đối với client-01 , hãy thêm dòng này:
Subnet = 10.0.0.2/32 Đối với client-02 , hãy thêm dòng này:
Subnet = 10.0.0.3/32 Lưu ý mỗi client có một mạng con khác nhau mà tinc sẽ phục vụ. Lưu và đóng file .
Tiếp theo, tạo các cặp khóa trên mỗi client :
- sudo tincd -n netname -K4096 
   như bạn đã làm với server-01, khi  được yêu cầu  chọn file  để lưu trữ các khóa RSA, hãy nhấn ENTER để chấp nhận các lựa chọn mặc định.
Sau đó, tạo tập lệnh bắt đầu network interface trên mỗi client :
- sudo nano /etc/tinc/netname/tinc-up 
Đối với client-01 , hãy thêm các dòng sau:
#!/bin/sh ip link set $INTERFACE up ip addr add 10.0.0.2/32 dev $INTERFACE ip route add 10.0.0.0/24 dev $INTERFACE Đối với máy khách-02 , hãy thêm thông tin sau:
#!/bin/sh ip link set $INTERFACE up ip addr add 10.0.0.3/32 dev $INTERFACE ip route add 10.0.0.0/24 dev $INTERFACE Lưu và đóng từng file .
Tiếp theo, tạo tập lệnh dừng network interface trên mỗi client :
- sudo nano /etc/tinc/netname/tinc-down 
Trên client-01 , thêm nội dung sau vào file trống:
#!/bin/sh ip route del 10.0.0.0/24 dev $INTERFACE ip addr del 10.0.0.2/32 dev $INTERFACE ip link set $INTERFACE down Trên client-02 , thêm phần sau ::
#!/bin/sh ip route del 10.0.0.0/24 dev $INTERFACE ip addr del 10.0.0.3/32 dev $INTERFACE ip link set $INTERFACE down Lưu file .
Làm cho các tập lệnh mạng có thể thực thi được bằng cách chạy lệnh sau trên mỗi client :
- sudo chmod 755 /etc/tinc/netname/tinc-* 
Cuối cùng, mở cổng 655 trên mỗi client  :
- sudo ufw allow 655 
Đến đây, các node khách hầu như đã được cài đặt xong. Họ vẫn cần public key mà ta đã tạo trên server -01 ở bước trước để xác thực kết nối với VPN.
Bước 4 - Phân phối key
Mỗi nút muốn giao tiếp trực tiếp với một nút khác phải trao đổi public key , nằm bên trong file cấu hình server . Trong trường hợp của ta , server -01 cần trao đổi public key với các node khác.
Khóa trao đổi giữa server -01 và client -01
Trên máy khách-01 , sao chép file cấu hình server của nó sang server -01 . Bởi vì cả máy khách-01 và server -01 đều ở trong cùng một trung tâm dữ liệu và cả hai đều được bật mạng riêng, bạn có thể sử dụng địa chỉ IP riêng của máy chủ01 tại đây:
- scp /etc/tinc/netname/hosts/client_01 sammy@server-01_private_IP:/tmp 
Sau đó, trên server-01 , sao chép file  cấu hình máy client-01 vào folder  /etc/tinc/ netname /hosts/ :
- sudo cp /tmp/client_01 /etc/tinc/netname/hosts/ 
Sau đó, trong khi vẫn ở trên server -01 , hãy sao chép file cấu hình server của nó sang máy khách-01 :
- scp /etc/tinc/netname/hosts/server_01 user@client-01_private_IP:/tmp 
Trên máy khách-01 , sao chép file của server -01 vào vị trí thích hợp:
- sudo cp /tmp/server_01 /etc/tinc/netname/hosts/ 
Trên máy khách-01 , hãy chỉnh sửa file  cấu hình  server  lưu trữ của  server -01 để trường Address được đặt thành địa chỉ IP riêng của  server -01 . Bằng cách này, client-01 sẽ kết nối với VPN qua mạng riêng:
- sudo nano /etc/tinc/netname/hosts/server_01 
Thay đổi Address thị Address chỉ để trỏ đến địa chỉ IP riêng của  server -01 :
Address = server-01_private_IP Subnet = 10.0.0.1/32 Lưu và thoát. Bây giờ ta hãy chuyển sang nút còn lại của ta , client-02 .
Khóa trao đổi giữa server -01 và client -02
Trên máy khách-02 , sao chép file cấu hình server của nó vào server -01 :
- scp /etc/tinc/netname/hosts/client_02 sammy@server-01_public_IP:/tmp 
Sau đó, trên  server -01 , sao chép file  cấu hình  server  client_02 vào vị trí thích hợp:
- sudo cp /tmp/client_02 /etc/tinc/netname/hosts/ 
Sau đó, sao chép file cấu hình server lưu trữ của server -01 sang máy khách-02 :
- scp /etc/tinc/netname/hosts/server_01 user@client-02_public_IP:/tmp 
Trên máy khách-02 , sao chép file của server -01 vào vị trí thích hợp:
- sudo cp /tmp/server_01 /etc/tinc/netname/hosts/ 
Giả sử bạn chỉ cài đặt hai nút client , bạn đã hoàn thành việc phân phối public key . Tuy nhiên, nếu bạn đang tạo một VPN lớn hơn, bây giờ là thời điểm tốt để trao đổi khóa giữa các node khác đó. Lưu ý nếu bạn muốn hai nút giao tiếp trực tiếp với nhau (không có server chuyển tiếp giữa), chúng cần phải trao đổi file cấu hình khóa / server của chúng và chúng cần có khả năng truy cập vào các network interface thực của nhau. Ngoài ra, bạn chỉ cần sao chép file cấu hình của từng server lưu trữ vào mọi nút trong VPN.
Bước 5 - Kiểm tra cấu hình
Trên mỗi nút, bắt đầu bằng server -01 , hãy bắt đầu tinc bằng lệnh sau:
- sudo tincd -n netname -D -d3 
Lệnh này bao gồm cờ -n , chỉ đến tên mạng cho VPN của  ta , netname . Điều này hữu ích nếu bạn đã  cài đặt  nhiều VPN và bạn cần chỉ định VPN nào bạn muốn bắt đầu. Nó cũng bao gồm cờ -D , ngăn chặn tinc bị tách và tách ra, cũng như vô hiệu hóa cơ chế khởi động lại tự động của tinc. Cuối cùng, nó bao gồm cờ -d , cho tinc chạy ở chế độ gỡ lỗi, với mức gỡ lỗi là 3 .
 Lưu ý: Khi nói đến daemon tinc, mức gỡ lỗi 3 sẽ hiển thị mọi yêu cầu được trao đổi giữa hai  server  bất kỳ, bao gồm yêu cầu xác thực, trao đổi khóa và cập nhật danh sách kết nối. Mức gỡ lỗi cao hơn hiển thị nhiều thông tin hơn về lưu lượng mạng, nhưng hiện tại  ta  chỉ quan tâm đến việc liệu  các node  có thể giao tiếp với nhau hay không, vì vậy mức 3 đủ. Tuy nhiên, trong kịch bản production ,  bạn cần  thay đổi mức gỡ lỗi thấp hơn để không làm đầy đĩa với các file  log .
 Bạn có thể tìm hiểu thêm về các cấp độ gỡ lỗi của tinc bằng cách xem lại tài liệu chính thức .
Sau khi khởi động daemon trên mỗi nút, bạn sẽ thấy kết quả với tên của mỗi nút khi chúng kết nối với server -01 . Bây giờ, hãy kiểm tra kết nối qua VPN.
 Trong một cửa sổ riêng biệt, trên client-02 , ping địa chỉ IP VPN của client-01 .  Ta  đã chỉ định đây là 10.0.0.2 , trước đó:
- ping 10.0.0.2 
Ping sẽ hoạt động chính xác và bạn sẽ thấy một số  kết quả  gỡ lỗi trong các cửa sổ khác về kết nối trên VPN. Điều này cho thấy rằng máy khách-02 có thể giao tiếp qua VPN thông qua  server -01 đến máy khách-01 . Nhấn CTRL+C để thoát ping.
Bạn cũng có thể sử dụng các giao diện VPN để thực hiện bất kỳ giao tiếp mạng nào khác, như kết nối ứng dụng, sao chép file và SSH.
 Trên mỗi cửa sổ gỡ lỗi tinc daemon, thoát khỏi daemon bằng cách nhấn CTRL+\ .
Bước 6 - Cấu hình Tinc để khởi động khi server khởi động
  Server  Ubuntu sử dụng systemd làm trình quản lý hệ thống mặc định để kiểm soát các quá trình  chạy . Do đó,  ta  có thể kích hoạt netname VPN tự động  khởi động khi server khởi động  bằng một lệnh systemctl .
Chạy lệnh sau trên mỗi nút để đặt tinc VPN khởi động khi nào máy khởi động:
- sudo systemctl enable tinc@netname 
Tinc được cấu hình để  bắt đầu khi server khởi động  trên mỗi máy của bạn và bạn có thể điều khiển nó bằng lệnh systemctl . Nếu bạn muốn bắt đầu nó ngay bây giờ, hãy chạy lệnh sau trên mỗi nút của bạn:
- sudo systemctl start tinc@netname 
Lưu ý : Nếu bạn có nhiều VPN, bạn bật hoặc khởi động từng VPN cùng một lúc, như sau:
- sudo systemctl start tinc@natename_01 tinc@netname_02 … tinc@netname_n 
Cùng với đó, tinc VPN của bạn đã được cấu hình đầy đủ và chạy trên từng nút của bạn.
Kết luận
Đến đây bạn đã xem qua hướng dẫn này, bạn sẽ có một nền tảng tốt để xây dựng VPN đáp ứng nhu cầu của bạn. Tinc rất linh hoạt và bất kỳ nút nào cũng có thể được cấu hình để kết nối với bất kỳ nút nào khác (mà nó có thể truy cập qua mạng) để nó có thể hoạt động như một mạng VPN mà không cần dựa vào một nút riêng lẻ.
Các tin liên quan
Cách thiết lập Nền tảng Eclipse Theia Cloud IDE trên Ubuntu 18.042020-01-06
Cách sử dụng Ansible để cài đặt và thiết lập WordPress với LAMP trên Ubuntu 18.04
2019-12-31
Cách cài đặt WordPress với OpenLiteSpeed trên Ubuntu 18.04
2019-12-18
Cách sử dụng Ansible để cài đặt và thiết lập LAMP trên Ubuntu 18.04
2019-12-17
Cách sử dụng Ansible để cài đặt và thiết lập LEMP trên Ubuntu 18.04
2019-12-05
Cách cài đặt và sử dụng TimescaleDB trên Ubuntu 18.04
2019-12-04
Cách lấy chứng chỉ Let's Encrypt bằng Ansible trên Ubuntu 18.04
2019-11-14
Cách cài đặt MongoDB trên Ubuntu 16.04
2019-10-13
Cách thêm và xóa người dùng trên Ubuntu 18.04
2019-09-12
Cách cài đặt và bảo mật Grafana trên Ubuntu 18.04
2019-09-05
 

