Cài đặt VPN với Tinc trên Ubuntu 16.04 LTS

 

Một mạng riêng ảo (VPN) là một mạng lưới tư nhân an toàn hoạt động trên một mạng lưới khu vực lớn hơn chẳng hạn như internet. Mạng riêng ảo đã trở nên ngày càng phổ biến trong những năm qua, phần lớn bởi vì họ cung cấp tăng cường an ninh và bảo mật mà không cần cài đặt phần cứng mới đắt và phức tạp. Họ cũng cung cấp một số lợi thế khác, trong đó có giảm chi phí mạng và hỗ trợ.

Mạng riêng ảo hoạt động bằng cách tạo ra một đường hầm mã hóa thông qua một mạng công cộng, và bằng cách sử dụng này một cách an toàn có thể gửi dữ liệu giữa các máy chủ và các thiết bị đầu cuối. Những kết nối này có thể được mã hóa trong nhiều cách khác nhau, và có rất nhiều khách hàng VPN khác nhau và SSH cho phù hợp với kiến trúc, ngân sách, và mức độ kinh nghiệm.

Tinc là một trong những các giải pháp như vậy (1,2). Một daemon VPN mã nguồn mở, nó bây giờ có sẵn cho một loạt các nền tảng, và có một số lợi thế hơn tương tự như các khách hàng VPN. Khách sạn cung cấp mã hóa an toàn và đáng tin cậy, tùy chọn nén, và là một cách dễ dàng mở rộng khi phát triển mạng lưới của bạn. Các lưới đầy đủ tự động định tuyến có nghĩa là lưu lượng truy cập VPN là luôn luôn (bất cứ khi nào có thể) gửi trực tiếp đến máy đích, mà không trải qua trung gian chuyển, và điều này rất nhiều cải thiện an ninh bằng cách hạn chế khả năng đánh cắp dữ liệu (3). Ngoài ra, bởi vì Tinc VPN xuất hiện để mã cấp mạng IP là một thiết bị mạng bình thường, sau khi thiết lập một VPN Tinc có là không cần để thích ứng với các phần mềm hiện có. Điều này làm cho Tinc VPN vốn khả năng mở rộng.

Vấn đề chỉ nhỏ với Tinc là rằng một số người đã tìm thấy nó một chút khó khăn để thiết lập. Nếu có âm thanh như bạn, không bao giờ sợ hãi-hôm nay tôi sẽ đưa bạn qua một (nhiều hay ít) rắc rối miễn phí cách để nhận được một VPN Tinc và chạy trên máy chủ của bạn.

Pre-requisites

Để thực hiện theo hướng dẫn này hoàn toàn, bạn sẽ cần ít nhất ba Ubuntu 16.04 máy chủ, và quyền root trên mỗi máy tính. Nếu bạn không có điều này hoặc không chắc chắn những gì điều này có nghĩa là, hướng dẫn này là không cho bạn-bạn nên trước tiên kiểm tra làm thế nào để thiết lập một máy chủ bằng cách sử dụng Ubuntu (4).

Nếu bạn đang xây dựng một hệ thống máy chủ từ đầu, trước tiên bạn cần phải suy nghĩ về làm thế nào máy của bạn sẽ giao tiếp với nhau. Trong hướng dẫn này, Tôi sẽ sử dụng các tên biến mà tôi nghĩ rằng hầu hết mọi người sẽ chọn, nhưng lưu ý rằng bạn có thể cần phải thích ứng với một số các tên biến cho phù hợp với thiết lập của riêng của bạn.

Nếu bạn muốn để làm theo hướng dẫn này chính xác, bạn sẽ cần đầu tiên để thiết lập hai VPSs trong Trung tâm dữ liệu tương tự, và sau đó thực hiện một phần ba VPS tại một trung tâm dữ liệu thứ hai. Trung tâm dữ liệu của tôi được gọi là NYC2, trong đó có hai VPSs, và AMS2, trong đó có một phần ba. Các VPSs được gọi là những điều sau đây:

externalnyc-tất cả các nút VPN của chúng tôi sẽ kết nối tới hệ phục vụ này, có nghĩa là nó phải ở lại kết nối và có sẵn để đảm bảo các chức năng mạng đúng cách. Nếu bạn cuối cùng muốn gắn thêm máy chủ để thiết lập của bạn lên, họ sẽ cần phải được thiết lập trong cùng một cách với externalnyc.

internalnyc-VPS này kết nối với nút VPN externalnyc bằng cách sử dụng một giao diện mạng riêng.

ams1-đây là kết nối VPN công cộng của chúng tôi. Nó kết nối đến externalnyc bằng cách sử dụng internet công cộng.

Mục tiêu

Những gì chúng ta muốn đạt được là như sau:

Mạng riêng của chúng tôi được thể hiện bằng các dòng màu xanh lá cây, và kết nối tất cả các máy chủ ba. Màu cam là mạng riêng của chúng tôi, liên kết với nhau hai máy chủ NYC2. Tất cả ba các máy chủ có thể kết nối thông qua VPN, mặc dù một mạng riêng là không có thể truy cập AMS1.

Để làm điều này, Hãy làm theo các bước sau:

Cài đặt Tinc

Đầu tiên lên, chúng ta cần phải cài đặt Tinc. Như bao giờ hết, đảm bảo rằng tất cả các kho apt của bạn được cập nhật bằng cách chạy:

sudo apt-get update

Sau đó cài đặt Tinc trong cách tiêu chuẩn thông qua apt:

sudo apt-get cài đặt tinc

Và đó là nó! Máy tính của bạn bây giờ sẽ tải về Tinc, cộng với bất kỳ điều kiện tiên quyết bạn cần. Chúng ta bây giờ cần phải có một cái nhìn tại các cấu hình.

Cấu hình

Cấu hình Tinc có thể là một chút khác nhau từ các mạng riêng ảo của bạn được sử dụng để. Nó sử dụng một "netname" để phân biệt một VPN từ một, Điều này trở nên rất hữu ích khi bạn có nhiều mạng riêng ảo chạy qua Tinc, nhưng là một chút counter-intuitive lúc đầu. Vì đây là mạng Tinc đầu tiên của chúng tôi, Hãy giữ nó đơn giản và gọi VPN của chúng tôi "netname".

Bây giờ cho mỗi máy chủ của chúng tôi. Mỗi người sẽ cần ba cấu hình thành phần:

Tập tin cấu hình: tinc.conf, tinc-up, tinc xuống, và một số tùy chọn của các tập tin khác.

Cặp khóa công cộng và tư nhân: đây là để mã hóa và xác thực.

Lưu trữ các tập tin cấu hình: chúng chứa các khóa công cộng, và các yếu tố cấu hình VPN.

Hãy bây giờ cấu hình mỗi máy chủ của chúng tôi lần lượt. Đầu tiên lên, externalnyc.

Cấu hình externalnyc

Ok, bây giờ để hạt và bu lông. Trên externalnyc, bắt đầu bằng cách tạo ra cấu trúc thư mục cấu hình cho VPN netname. Chạy:

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

Bây giờ mở tinc.conf trong soạn thảo văn bản được lựa chọn của bạn:

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

Một khi bạn có các tập tin ở phía trước của bạn, Thêm sau vào dưới cùng của các tập tin:

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

Tất cả các bạn đang làm ở đây là để cấu hình một nút được gọi là externalnyc, và nói cho các máy chủ đó là giao diện mạng sẽ sử dụng ipv4 và được gọi là "tun0". Lưu tập tin, và đóng nó.

Tiếp theo, chúng ta cần phải tạo một tập tin cấu hình máy chủ lưu trữ cho externalnyc. Để làm điều này, mở tập tin cấu hình máy chủ trong một trình soạn thảo văn bản:

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

Một lần nữa, Thêm một số dòng dưới cùng của tệp này, thay thế địa chỉ IP công cộng của VPS của bạn trong dòng đầu tiên:

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

Đây là các tập tin máy chủ khác sẽ sử dụng để kết nối với externalnyc. Địa chỉ cho các nút khác như thế nào và ở đâu để kết nối với hệ phục vụ này, và địa chỉ mạng con là con mà daemon này sẽ hoạt động trên. Một lần nữa, lưu các thay đổi cho tệp này và đóng nó.

Bây giờ chúng ta cần phải tạo ra công chúng / Cặp khóa riêng cho máy chủ này. Điều này là dễ dàng, đủ, chỉ cần chạy:

sudo tincd - n netname-K4096

Điều này làm cho một khóa RSA tư nhân, và thêm một cặp khóa công cộng vào cuối của tập tin cấu hình mà chúng ta vừa tạo. Bạn có thể mở nó một lần nữa để thấy rằng điều này đã được thực hiện, Nếu bạn thích.

Bây giờ, chúng ta cần để làm cho tinc-up, một kịch bản nhỏ mà sẽ chạy khi VPN của chúng tôi bắt đầu. Mở tập tin sau đây để chỉnh sửa:

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

Và thêm:

#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 mặt nạ mạng 255.255.255.0

Bất cứ khi nào VPN netname bắt đầu, kịch bản này sẽ chạy. Nó sẽ làm cho một giao diện mạng được sử dụng bởi VPN của chúng tôi, và ngày này VPN externalnyc sẽ có một IP của 10.0.0.1.

Nhưng khi VPN dừng lại, chúng tôi muốn giao diện mạng này biến mất, Vì vậy, chúng ta cần một kịch bản nhiều hơn. Điều này nên được nối thêm vào tinc xuống. Mở cửa:

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

Và sau đó thêm:

#!/bin/sh
ifconfig $INTERFACE down

Và một lần nữa lưu và bỏ thuốc lá. Chúng tôi bây giờ có kịch bản của chúng tôi, nhưng để cho họ làm việc, họ cần phải được gắn cờ như thực thi. Điều này là dễ dàng, đủ, sử dụng dòng lệnh:

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

Tiết kiệm và bỏ thuốc lá, và bạn đã làm xong cấu hình hệ phục vụ này. Tiếp theo, internalnyc và ams1.

Cấu hình internalnyc và ams1

Để đặt cấu hình các máy chủ còn lại hai, bạn cần chạy lệnh tương tự trên mỗi máy tính. Có một vài biến thể nhỏ, mà tôi sẽ chỉ ra, nhưng quá trình này cơ bản giống nhau.

Như chúng ta đã làm với externalnyc ở trên, chúng tôi lần đầu tiên cần phải làm cho cấu trúc thư mục cho các tập tin cấu hình. Trên mỗi máy chủ, chạy như sau, và sau đó, mở tập tin cấu hình Tinc để chỉnh sửa:

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

Sau đó, thêm một vài dòng dưới cùng của tệp này, thay thế "node_name" với tên của mỗi nút:

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

Bạn có thể thấy rằng cả hai máy chủ của chúng tôi bây giờ được cấu hình để cố gắng để kết nối với externalnyc. Lưu tệp này, và đóng nó.

Bây giờ chúng ta cần phải làm cho các máy chủ tập tin cấu hình. Chạy:

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

Sau đó cho internalnyc, Thêm dòng này:

Mạng con = 10.0.0.2/32

Và cho ams1, Thêm dòng này:

Mạng con = 10.0.0.3/32

Sự khác biệt duy nhất ở đây là các địa chỉ khác nhau, Vì vậy chúng tôi có thể cho biết các máy chủ của chúng tôi ngoài. Lưu tệp này, và đóng nó.

Bây giờ, cũng giống như trước khi, chúng ta cần phải tạo ra các khu vực của chúng tôi / Cặp khóa riêng, và tạo ra mạng lưới giao diện bắt đầu lên kịch bản. Trên mỗi máy chủ, chạy:

sudo tincd - n netname-K4096

Và sau đó:

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

Bây giờ. Cho mỗi máy chủ, chúng ta cần phải sử dụng các địa chỉ mà chúng tôi đã chỉ định trước đó. Nếu bạn đang theo tôi chính xác, cho internalnyc bạn cần phải thêm:

ifconfig $INTERFACE 10.0.0.2 mặt nạ mạng 255.255.255.0

Và cho ams1:

ifconfig $INTERFACE 10.0.0.3 mặt nạ mạng 255.255.255.0

Nhưng, Nếu bạn chỉ định địa chỉ khác nhau ở trên, thay đổi ở đây là tốt. Lưu các tệp của bạn, và bỏ thuốc lá. Chúng tôi là hầu như ở đó.

Chúng tôi chỉ cần thực hiện kịch bản dừng giao diện mạng, cũng giống như trước khi:

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

Và sau đó thêm dòng này trên cả hai máy chủ:

ifconfig $INTERFACE xuống

Và chút cấu hình, cuối cùng là để làm cho thực thi kịch bản mới của chúng tôi:

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

Tiết kiệm và bỏ thuốc lá. Phew. Nếu tất cả mọi thứ cũng đã đi, Tất cả ba các máy chủ được cấu hình bây giờ. Bây giờ cho việc thực hiện mật mã học.

Phân phối các phím

Nếu bạn đang sử dụng một hệ thống quản lý cấu hình, bạn là người may mắn. Trong một thế giới lý tưởng, mỗi nút mà chúng tôi bây giờ đã có nhu cầu để có thể nói chuyện trực tiếp với một nút bằng cách sử dụng một công / giao diện chính riêng. Các phím, như chúng ta đã thấy ở trên, đang ở trong tập tin cấu hình máy chủ cho mỗi máy chủ. Trong mạng đơn giản chúng tôi đang làm ở đây, externalnyc thực sự chỉ cần trao đổi phím với các nút khác.

Và như vậy, cách dễ nhất để làm điều này chỉ đơn giản là để sao chép mỗi khóa công khai cho tất cả các thành viên của các nút khác nhau. Điều này là thực sự khá dễ dàng, chỉ cần cẩn thận để thay đổi giá trị "địa chỉ" trong tập tin cấu hình của externalnyc đến địa chỉ IP riêng của riêng của nó khi bạn sao chép nó. Như vậy, kết nối sẽ được thiết lập trên mạng cá nhân.

Nếu bạn theo tôi và được gọi là VPN của bạn "netname", tập tin cấu hình máy chủ đang ở đây: /etc/tinc/netname/hosts

Trao đổi phím giữa externalnyc và internalnyc

Điều này là đơn giản. Trên internalnyc, tìm thấy các máy chủ tập tin cấu hình và sao chép nó vào externalnyc:

SCP /etc/tinc/netname/hosts/internalnyc [email protected]_private_IP: / tmp

Sau đó, trên externalnyc, sao chép các tập tin cùng vào vị trí thích hợp:

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

Bây giờ chúng ta làm các thủ tục khác. Trên externalnyc, sao chép tập tin cấu hình máy chủ để internalnyc:

SCP /etc/tinc/netname/hosts/externalnyc [email protected]_private_IP: / tmp

Và sau đó trên internalnyc sao chép các tập tin vì vậy nó là ở đúng nơi:

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

Bây giờ chúng ta cần phải chỉnh sửa tập tin cấu hình máy chủ của externalnyc vào internalnyc để địa chỉ là chính xác. Điều này là do đó, các nút sẽ kết nối với VPN thông qua mạng riêng. Vì vậy, trên internalnyc, mở tập tin cấu hình máy chủ cho externalnyc:

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

Và thay đổi giá trị địa chỉ đến địa chỉ IP riêng của externalnyc, Thích cái này:

Địa chỉ = externalnyc_private_IP

Lưu tập tin, và bỏ thuốc lá. Đó là những hai phím thực hiện. Bây giờ chúng ta chỉ cần trao đổi phím với một nút còn lại của chúng tôi.

Trao đổi phím giữa externalnyc và ams1

Quá trình ở đây là khá tương tự. Bằng cách sử dụng ams1, sao chép tập tin cấu hình máy chủ để externalnyc:

SCP /etc/tinc/netname/hosts/ams1 [email protected]_public_IP: / tmp

Và sau đó một lần nữa sao chép nó vào đúng nơi, sử dụng externalnyc:

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

Ở trên externalnyc, sao chép tập tin một cách khác, trên để ams1:

SCP /etc/tinc/netname/hosts/externalnyc [email protected]_public_IP: / tmp

Và một lần nữa, trên ams1, sao chép tập tin này vì vậy nó là ở đúng nơi:

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

Và bạn đang thực hiện với trao đổi khóa. Trong lý thuyết, bây giờ anh làm việc một, VPN được mã hóa qua Tinc. Nếu bạn đã theo hướng dẫn này để thư, bạn có thể di chuyển trên để kiểm tra thiết lập của bạn lên. Nếu, Tuy nhiên, bạn cũng đã lấy cơ hội để thêm các nút phụ, bây giờ là thời điểm tốt để trao đổi tất cả các phím, bạn sẽ cần.

Hãy nhớ rằng nếu bạn đang sử dụng một nút trung tâm, như tôi đang làm ở đây, bạn không cần phải sao chép tất cả các phím cho tất cả các máy chủ. Tuy nhiên, Nếu bạn muốn các nút để có thể nói chuyện với nhau trực tiếp, họ sẽ cần phải trao đổi phím. Quy trình làm việc này là giống như tôi đã mô tả ở trên-chỉ làm lặp đi lặp lại như nhiều như bạn cần phải đạt được mong muốn kết nối của bạn.

Thử nghiệm

Bây giờ bạn có sẵn sàng để thử nghiệm. Để làm điều này, đó là một ý tưởng tốt để bắt đầu Tinc ở chế độ gỡ lỗi, Vì vậy, chúng ta có thể nắm bắt bất kỳ lỗi nào và nhận được một số thông tin thêm, nếu bất cứ điều gì sai trái. Hãy nhớ rằng một VPN cấu hình kém có thể thực sự là một nguy cơ bảo mật, Vì vậy, hãy chắc chắn rằng mọi thứ hoạt động đúng cách trước khi bạn bắt đầu sử dụng VPN của bạn cho bất cứ điều gì quan trọng.

Để bắt đầu Tinc ở chế độ gỡ lỗi, trên mỗi nút, bắt đầu với externalnyc, chạy:

sudo tincd - n netname -D-d3

Nếu bạn đã gọi là VPN của bạn một cái gì đó khác nhau, Tất nhiên, thay đổi thay đổi "netname" thành tên thích hợp.

Sau khi các daemon bắt đầu trên mỗi nút, nó nên trở về đầu ra cho bạn tên của mỗi nút như họ kết nối. Nếu điều này không xảy ra, bạn đã thực hiện một sai lầm một nơi nào đó.

Bây giờ, chúng tôi có thể kiểm tra các VPN. Một cửa sổ mới trên ams1, ping internalnyc sử dụng địa chỉ IP của nó. Chúng tôi chỉ định này để 10.0.0.2 trước đó, Vì vậy, loại:

ping 10.0.0.2

Hy vọng, thời gian ping sẽ làm việc. Bạn cũng sẽ thấy một số đầu ra gỡ lỗi trong các cửa sổ khác, Mô tả các kết nối bạn vừa mới thực hiện. Ams1 bây giờ kết nối, thông qua VPN mới của bạn, để externalnyc, và có thể kết nối với internalnyc qua nó. Nhấn CTRL-C và ping sẽ dừng lại.

Bây giờ bạn đã có một kết nối VPN an toàn, bạn có thể sử dụng nó cho bất kỳ loại nào khác của mạng truyền thông-ứng dụng kết nối, sao chép tập tin, SSH, hoặc bất cứ điều gì khác mà bạn thích.

Nếu thời gian ping không làm việc, nhưng bạn nghĩ rằng bạn đã làm tất cả mọi thứ đúng, nó có thể là một bức tường lửa có trong cách. Kiểm tra cài đặt tường lửa của bạn, và thử lại.

Nơi tôi khởi động

Chỉ cần một điều cuối cùng. Nếu bây giờ bạn sẽ sử dụng Tinc VPN của bạn cho tất cả các mạng của bạn, bạn có thể muốn thiết lập nó để khởi động khi khởi động. Bạn sẽ cần phải làm điều này trên mỗi nút, bằng cách chỉnh sửa tập tin cấu hình nets.boot. Mở tập tin sử dụng:

sudo vi /etc/tinc/nets.boot

Và sau đó thêm tên của VPN mới của bạn để tập tin này. Nếu bạn chọn “netname” như tôi, điều này sẽ trông giống như sau:

# Tập tin này có chứa tất cả các tên của các mạng được bắt đầu khi khởi động hệ thống.
netname

Tiết kiệm và bỏ thuốc lá, và bạn đang thực hiện. Tinc hiện đang làm việc, và sẽ bắt đầu khởi động. Bạn làm tốt lắm.

Nếu bạn cần phải kiểm soát Tinc, bây giờ bạn có thể chạy các “dịch vụ” lệnh để làm như vậy. Trên mỗi nút, chỉ cần chạy:

sudo dịch vụ tinc bắt đầu

Và có một chơi xung quanh. Kiểm soát cơ bản nhất có thể đạt được thông qua các lệnh này.

Kết luận

Bây giờ bạn nên có một kết nối VPN an toàn chạy qua Tinc trên tất cả các máy. VPN này có thể được sử dụng làm căn cứ để xây dựng thêm các chức năng mạng.

Nếu bạn muốn thêm vào các nút trong tương lai, hoặc kết hợp Tinc với các mạng riêng ảo, Tinc sẽ cho phép bạn làm điều này. Quá trình cho mỗi nút phụ là giống như tôi đã mô tả ở trên, và bạn có thể dễ dàng nhìn thấy các biến và các địa chỉ cần thay đổi. Chỉ cần nhớ rằng nếu bạn muốn các nút để có thể kết nối với nhau trực tiếp, bạn sẽ cần phải trao đổi phím giữa chúng trực tiếp. Thích cái này, Tinc hoạt động như một lưới VPN, đó là an toàn hơn một chút so với phương pháp tiếp cận của tôi (3). Nếu không, bạn chỉ có thể thiết lập mạng của bạn như tôi đã thực hiện, và có tất cả mọi thứ đi qua một nút trung tâm.

Dù bằng cách nào, bạn đang miễn phí để chơi xung quanh. Chúc may mắn!

Tài nguyên

(1) https://www.tinc-vpn.org/

(2) https://www.linux.com/news/creating-vpn-tinc

(3) https://thebestvpn.com/cryptography/

(4) https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04

Nguồn