Thứ tư, 18/06/2014 | 00:00 GMT+7

Cách cài đặt Tinc và thiết lập VPN cơ bản trên Ubuntu 14.04

Trong hướng dẫn này, ta sẽ giới thiệu cho các bạn cách sử dụng Tinc, một daemon Mạng riêng ảo (VPN) open-souce , để tạo một VPN an toàn mà 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 14.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.

Một số tính năng mà Tinc có làm cho nó hữu ích bao gồm mã hóa, nén tùy chọn, định tuyến lưới tự động (lưu lượng VPN được định tuyến trực tiếp giữa các server giao tiếp, nếu có thể) và mở rộng dễ dàng. Những tính năng này phân biệt Tinc với các giải pháp VPN khác như OpenVPN và làm cho nó trở thành giải pháp tốt để tạo VPN từ nhiều mạng nhỏ được phân phối theo địa lý. Tinc được hỗ trợ trên nhiều hệ điều hành, bao gồm Linux, Windows và Mac OS X.

Lưu ý: Nếu bạn muốn cài đặt Tinc mesh VPN nhanh chóng và dễ dàng, hãy xem hướng dẫn này: Cách sử dụng Ansible và Tinc VPN để bảo mật cơ sở hạ tầng server của bạn .

Yêu cầu

Để hoàn thành hướng dẫn này, bạn sẽ yêu cầu quyền truy cập root trên ít nhất ba server Ubuntu 14.04. Hướng dẫn cài đặt quyền truy cập root có thể tìm thấy tại đây (bước 3 và 4): Cài đặt server ban đầu với Ubuntu 14.04 .

Nếu bạn đang lên kế hoạch sử dụng điều này trong môi trường của riêng mình, bạn sẽ phải lập kế hoạch làm thế nào các server của bạn cầ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 .

Nếu bạn muốn làm theo chính xác hướng dẫn này, hãy tạo hai VPS trong cùng một trung tâm dữ liệu, với mạng riêng và tạo một VPS khác trong một trung tâm dữ liệu riêng biệt. Ta sẽ tạo hai VPS trong trung tâm dữ liệu NYC2 và một trong trung tâm dữ liệu AMS2 với các tên sau:

  • externalnyc : Tất cả các node VPN sẽ kết nối với server 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 tương tự như server này để cung cấp khả năng dự phòng, nếu muốn.
  • Internalnyc : Kết nối với nút VPN bên ngoài bằng network interface riêng của nó
  • ams1 : Kết nối với nút VPN bên ngoài qua Internet công cộng

Mục tiêu của ta

Đây là sơ đồ của VPN mà ta muốn cài đặt (được mô tả trong Yêu cầu ):

 Cài đặt  Tinc VPN

Màu xanh lá cây đại diện cho VPN của ta , màu xám đại diện cho Internet công cộng và màu cam đại diện cho mạng riêng. 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 ams1.

Hãy bắt đầu bằng cách cài đặt Tinc!

Cài đặt Tinc

Trên mỗi VPS mà bạn muốn tham gia mạng riêng, hãy cài đặt Tinc. Hãy bắt đầu bằng cách cập nhật apt:

sudo apt-get update 

Sau đó cài đặt Tinc thông qua apt:

sudo apt-get install tinc 

Bây giờ Tinc đã được cài đặt, ta hãy xem cấu hình Tinc.

Cấu hình Tinc

Tinc sử dụng “tên mạng” để phân biệt một Tinc VPN với một VPN khác (trong trường hợp có nhiều VPN) và bạn nên sử dụng tên mạng ngay cả khi bạn chỉ cấu hình một VPN. Ta sẽ gọi VPN của bạn là “ netname ” để đơn giản hóa.

Mọi server sẽ là một phần của VPN của ta yêu cầu ba thành phần cấu hình sau:

  • Ví dụ: file cấu hình: tinc.conf, tinc-up và tinc-down
  • Cặp public key / riêng tư: Để mã hóa và xác thực nút
  • Tệp cấu hình server : Có chứa public key và cấu hình VPN khác

Hãy bắt đầu bằng cách cấu hình nút bên ngoài của ta .

Cấu hình bên ngoài

Trên externalnyc , tạo cấu trúc folder cấu hình cho VPN của ta có tên là “netname”:

sudo mkdir -p /etc/tinc/netname/hosts 

Bây giờ hãy mở tinc.conf để chỉnh sửa:

sudo vi /etc/tinc/netname/tinc.conf 

Bây giờ thêm các dòng sau:

Name = externalnyc AddressFamily = ipv4 Interface = tun0 

Điều này chỉ đơn giản là cấu hình một nút có tên là externalnyc , với network interface sẽ sử dụng IPv4 được gọi là “tun0”. Lưu và thoát.

Tiếp theo, hãy tạo một file cấu hình server bên ngoài :

sudo vi /etc/tinc/netname/hosts/externalnyc 

Thêm các dòng sau vào nó (thay thế địa chỉ IP công cộng của VPS của bạn tại đây):

Address = externalnyc_public_IP Subnet = 10.0.0.1/32 

Cuối cùng, file này sẽ được sử dụng trên các server khác để giao tiếp với server này. Địa chỉ chỉ định cách các node khác sẽ kết nối với server này và mạng con chỉ định mạng con mà daemon này sẽ phục vụ. Lưu và thoát.

Bây giờ tạo cặp public key / riêng tư cho server này bằng lệnh sau:

sudo tincd -n netname -K4096 

Thao tác này tạo private key (/ etc / tinc / netname /rsa_key.priv) và nối public key vào file cấu hình server bên ngoài mà ta đã tạo gần đây (/ etc / tinc / netname / hosts / externalnyc ).

Bây giờ ta phải tạo tinc-up , tập lệnh sẽ chạy khi nào VPN tên mạng của ta được khởi động. Mở file để chỉnh sửa ngay bây giờ:

sudo vi /etc/tinc/netname/tinc-up 

Thêm các dòng sau:

#!/bin/sh ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0 

Khi ta khởi động VPN, tập lệnh này sẽ chạy để tạo network interface mà VPN của ta sẽ sử dụng. Trên VPN, server này sẽ có địa chỉ IP là 10.0.0.1.

Cũng hãy tạo một tập lệnh để xóa network interface khi VPN của ta bị dừng:

sudo vi /etc/tinc/netname/tinc-down 

Thêm các dòng sau:

#!/bin/sh ifconfig $INTERFACE down 

Lưu và thoát.

Cuối cùng, làm cho các tập lệnh mạng tinc có thể thực thi được:

sudo chmod 755 /etc/tinc/netname/tinc-* 

Lưu và thoát.

Hãy chuyển sang các node khác của ta .

Cấu hình Internalnyc và ams1

Các bước này là bắt buộc trên cả Internalnycams1 , với những thay đổi nhỏ sẽ được lưu ý.

Trên Internalnycams1 , hãy tạo cấu trúc folder cấu hình cho VPN của ta có tên “netname” và chỉnh sửa file cấu hình Tinc:

sudo mkdir -p /etc/tinc/netname/hosts sudo vi /etc/tinc/netname/tinc.conf 

Thêm các dòng sau (thay thế tên bằng tên nút):

Name = node_name AddressFamily = ipv4 Interface = tun0 ConnectTo = externalnyc 

Các node này được cấu hình để cố gắng kết nối với “externalnyc” (nút mà ta đã tạo trước đó). Lưu và thoát.

Tiếp theo, hãy tạo file cấu hình server :

sudo vi /etc/tinc/netname/hosts/node_name 

Đối với Internalnyc , hãy thêm dòng này:

Subnet = 10.0.0.2/32 

Đối với ams1 , hãy thêm dòng này:

Subnet = 10.0.0.3/32 

Lưu ý các con số khác nhau. Lưu và thoát.

Tiếp theo, tạo các cặp khóa:

sudo tincd -n netname -K4096 

Và tạo kịch bản bắt đầu network interface :

sudo vi /etc/tinc/netname/tinc-up 

Đối với Internalnyc , hãy thêm dòng này:

ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0 

Đối với ams1 , hãy thêm dòng này:

ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0 

Các địa chỉ IP này là cách các node này sẽ được truy cập trên VPN. Lưu và thoát.

Bây giờ tạo tập lệnh dừng network interface :

sudo vi /etc/tinc/netname/tinc-down 

Và thêm dòng này:

ifconfig $INTERFACE down 

Lưu và thoát.

Cuối cùng, làm cho các tập lệnh mạng tinc có thể thực thi được:

sudo chmod 755 /etc/tinc/netname/tinc-* 

Lưu và thoát.

Bây giờ ta phải phân phối các file cấu hình server cho mỗi nút.

Phân phối key

Nếu bạn tình cờ sử dụng hệ thống quản lý cấu hình, đây là một ứng dụng tốt. Tối thiểu, 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 . Ví dụ, trong trường hợp của ta , chỉ có externalnyc cần trao đổi public key với các node khác. Sẽ dễ dàng quản lý hơn nếu bạn chỉ sao chép từng public key cho tất cả các thành viên của nút. Lưu ý bạn cần thay đổi giá trị "Địa chỉ" trong file cấu hình server của bên ngoài thành địa chỉ IP riêng của nó khi nó được sao chép sang nội bộ , để kết nối đó được cài đặt qua mạng riêng.

Vì VPN của ta được gọi là “netname”, đây là vị trí của các file cấu hình server : /etc/tinc/ netname /hosts

Trao đổi khóa giữa bên ngoài và bên trong

Trên Internalnyc , hãy sao chép file cấu hình server của nó sang externalnyc :

scp /etc/tinc/netname/hosts/internalnyc user@externalnyc_private_IP:/tmp 

Sau đó, trên externalnyc , sao chép file Internalnyc vào vị trí thích hợp:

cd /etc/tinc/netname/hosts; sudo cp /tmp/internalnyc . 

Sau đó, trên externalnyc , sao chép file cấu hình server của nó vào internalnyc :

scp /etc/tinc/netname/hosts/externalnyc user@internalnyc_private_IP:/tmp 

Trên Internalnyc , hãy sao chép file của bên ngoài vào vị trí thích hợp:

cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc . 

Trên Internalnyc , hãy chỉnh sửa file cấu hình server của bên ngoài để trường “Địa chỉ” được đặt thành địa chỉ IP riêng của bên ngoài (vì vậy, internalnyc sẽ kết nối với VPN qua mạng riêng). Chỉnh sửa file cấu hình server của bên ngoài :

sudo vi /etc/tinc/netname/hosts/externalnyc 

Thay đổi giá trị "Địa chỉ" thành địa chỉ IP riêng của bên ngoài :

Address = externalnyc_private_IP 

Lưu và thoát. Bây giờ ta hãy chuyển sang nút còn lại của ta , ams1.

Trao đổi khóa giữa bên ngoài và ams1

Trên ams1 , sao chép file cấu hình server của nó sang bên ngoài :

scp /etc/tinc/netname/hosts/ams1 user@externalnyc_public_IP:/tmp 

Sau đó, trên externalnyc , sao chép tệp của ams1 vào vị trí thích hợp:

cd /etc/tinc/netname/hosts; sudo cp /tmp/ams1 . 

Sau đó, trên bên ngoài , sao chép file cấu hình server của nó sang ams1 :

scp /etc/tinc/netname/hosts/externalnyc user@ams1_public_IP:/tmp 

Trên ams1 , sao chép file của bên ngoài vào vị trí thích hợp:

cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc . 

Trao đổi khóa giữa các node bổ sung

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 từng cấu hình server tới mọi nút trong VPN.

Kiểm tra cấu hình của ta

Trên mỗi nút, bắt đầu bằng externalnyc , hãy khởi động Tinc ở chế độ gỡ lỗi như vậy (tên mạng là tên của VPN của ta ):

sudo tincd -n netname -D -d3 

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 bên ngoài. 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 ams1 , ping địa chỉ IP VPN của Internalnyc ( ta đã gán cho 10.0.0.2, trước đó):

ping 10.0.0.2 

Ping sẽ hoạt động tốt 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 biết ams1 có thể giao tiếp qua VPN thông qua externalnyc với internalnyc. 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 daemon bằng cách nhấn CTRL-.

Lưu ý : Nếu các kết nối không hoạt động, hãy đảm bảo firewall của bạn không chặn các kết nối hoặc chuyển tiếp.

Cấu hình Tinc để khởi động khi server khởi động

Trước khi tập lệnh Tinc init hoạt động bình thường, ta phải đặt tên VPN của bạn vào file cấu hình nets.boot .

Trên mỗi nút , chỉnh sửa nets.boot:

sudo vi /etc/tinc/nets.boot 

Thêm tên (các) VPN của bạn vào file này. Của ta là "netname":

# This file contains all names of the networks to be started on system startup. netname 

Lưu và thoát. Tinc hiện đã được cấu hình để bắt đầu khi server khởi động và nó có thể được điều khiển thông qua lệnh service . 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 service tinc start 

Chúc mừng! Tinc VPN của bạn đã được cài đặt .

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, không dựa vào một nút duy nhất.

Chúc may mắn!


Tags:

Các tin liên quan

Cách cài đặt và sử dụng OTPW cho mật khẩu SSH dùng một lần trên Ubuntu 14.04
2014-06-17
Cách cài đặt và cấu hình Syncthing để đồng bộ hóa các thư mục trên Ubuntu 14.04
2014-06-16
Cách sử dụng Icinga để giám sát server và dịch vụ của bạn trên Ubuntu 14.04
2014-06-13
Cách sử dụng Logstash và Kibana để tập trung log trên Ubuntu 14.04
2014-06-11
Cách cài đặt Graylog2 và tập trung log trên Ubuntu 14.04
2014-06-06
Cách cài đặt và cấu hình OpenLDAP và phpLDAPadmin trên server Ubuntu 14.04
2014-06-05
Cách cấu hình Collectd để thu thập số liệu hệ thống cho Graphite trên Ubuntu 14.04
2014-06-03
Cách cấu hình StatsD để thu thập số liệu thống kê tùy ý cho Graphite trên Ubuntu 14.04
2014-06-03
Cách cài đặt OctoberCMS trên VPS chạy Ubuntu 14.04
2014-05-28
Cách cài đặt và sử dụng Graphite trên server Ubuntu 14.04
2014-05-27