웹사이트 검색

Ubuntu 14.04에서 Tinc를 설치하고 기본 VPN을 설정하는 방법


소개

이 튜토리얼에서는 오픈 소스 가상 사설망(VPN) 데몬인 Tinc를 사용하여 서버가 마치 로컬 네트워크에 있는 것처럼 통신할 수 있는 보안 VPN을 만드는 방법을 살펴보겠습니다. 또한 Tinc를 사용하여 개인 네트워크에 보안 터널을 설정하는 방법도 보여줍니다. 우리는 Ubuntu 14.04 서버를 사용할 것이지만 다른 OS와 함께 사용하도록 구성을 조정할 수 있습니다.

Tinc를 유용하게 만드는 몇 가지 기능에는 암호화, 선택적 압축, 자동 메시 라우팅(가능한 경우 VPN 트래픽이 통신 서버 간에 직접 라우팅됨) 및 손쉬운 확장이 포함됩니다. 이러한 기능은 Tinc를 OpenVPN과 같은 다른 VPN 솔루션과 차별화하며 지리적으로 분산된 많은 소규모 네트워크에서 VPN을 생성하는 데 적합한 솔루션입니다. Tinc는 Linux, Windows 및 Mac OS X를 포함한 많은 운영 체제에서 지원됩니다.

참고: Tinc 메시 VPN을 빠르고 쉽게 설정하려면 Ansible 및 Tinc VPN을 사용하여 서버 인프라를 보호하는 방법 튜토리얼을 확인하십시오.

전제 조건

이 자습서를 완료하려면 최소 3개의 Ubuntu 14.04 서버에 대한 루트 액세스 권한이 필요합니다. 루트 액세스 설정 지침은 여기에서 찾을 수 있습니다(3단계 및 4단계). Ubuntu 14.04를 사용한 초기 서버 설정.

자신의 환경에서 이것을 사용하려는 경우 서버가 서로 액세스해야 하는 방법을 계획하고 이 자습서에 제시된 예제를 자신의 필요에 맞게 조정해야 합니다. 이것을 자신의 설정에 맞게 조정하는 경우 예제에서 강조 표시된 값을 자신의 값으로 대체해야 합니다.

이 튜토리얼을 정확히 따르고 싶다면 동일한 데이터 센터에 사설 네트워킹을 사용하여 두 개의 VPS를 생성하고 별도의 데이터 센터에 또 다른 VPS를 생성하십시오. 다음 이름으로 NYC2 데이터 센터에 두 개의 VPS와 AMS2 데이터 센터에 하나를 생성합니다.

  • externalnyc: 모든 VPN 노드가 이 서버에 연결되며 적절한 VPN 기능을 위해 연결이 유지되어야 합니다. 원하는 경우 이중화를 제공하기 위해 이와 유사하게 추가 서버를 구성할 수 있습니다.
  • internalnyc: 개인 네트워크 인터페이스를 사용하여 externalnyc VPN 노드에 연결
  • ams1: 공용 인터넷을 통해 externalnyc VPN 노드에 연결

우리의 목표

다음은 설정하려는 VPN의 다이어그램입니다(전제 조건에 설명됨).

녹색은 VPN을, 회색은 공용 인터넷을, 주황색은 사설 네트워크를 나타냅니다. 사설 네트워크가 ams1에 액세스할 수 없더라도 세 서버 모두 VPN에서 통신할 수 있습니다.

Tinc를 설치하여 시작해 봅시다!

Tinc 설치

사설 네트워크에 가입하려는 각 VPS에 Tinc를 설치합니다. apt를 업데이트하여 시작하겠습니다.

sudo apt-get update

그런 다음 apt를 통해 Tinc를 설치합니다.

sudo apt-get install tinc

이제 Tinc가 설치되었으므로 Tinc 구성을 살펴보겠습니다.

주석 구성

Tinc는 하나의 Tinc VPN을 다른 VPN과 구별하기 위해 "netname\을 사용하며(여러 VPN의 경우) VPN을 하나만 구성할 계획이더라도 netname을 사용하는 것이 좋습니다. 우리는 VPN을 "netname”을 참조하십시오.

VPN의 일부가 될 모든 서버에는 다음 세 가지 구성 요소가 필요합니다.

  • 구성 파일: tinc.conf, tinc-up, tinc-down 등
  • 공개/비공개 키 쌍: 암호화 및 노드 인증용
  • 호스트 구성 파일: 공개 키 및 기타 VPN 구성을 포함하는 파일

externalnyc 노드를 구성하여 시작하겠습니다.

externalnyc 구성

externalnyc에서 "netname\이라는 VPN에 대한 구성 디렉토리 구조를 생성합니다.

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

이제 편집을 위해 tinc.conf를 엽니다.

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

이제 다음 줄을 추가합니다.

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

이렇게 하면 "tun0\이라는 IPv4를 사용할 네트워크 인터페이스와 함께 externalnyc라는 노드가 구성됩니다. 저장하고 종료합니다.

다음으로 externalnyc 호스트 구성 파일을 생성해 보겠습니다.

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

여기에 다음 줄을 추가합니다(여기에서 VPS의 공용 IP 주소로 대체).

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

궁극적으로 이 파일은 다른 서버에서 이 서버와 통신하는 데 사용됩니다. 주소는 다른 노드가 이 서버에 연결하는 방법을 지정하고 서브넷은 이 데몬이 서비스할 서브넷을 지정합니다. 저장하고 종료합니다.

이제 다음 명령을 사용하여 이 호스트에 대한 공개/개인 키 쌍을 생성하십시오.

sudo tincd -n netname -K4096

이렇게 하면 개인 키(/etc/tinc/netname/rsa_key.priv)가 생성되고 공개 키가 최근에 생성한 externalnyc 호스트 구성 파일(/etc/ tinc/netname/hosts/externalnyc).

이제 netname VPN이 시작될 때마다 실행할 스크립트인 tinc-up을 만들어야 합니다. 지금 편집할 파일을 엽니다.

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

다음 줄을 추가합니다.

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

VPN을 시작하면 이 스크립트가 실행되어 VPN이 사용할 네트워크 인터페이스를 생성합니다. VPN에서 이 서버의 IP 주소는 10.0.0.1입니다.

VPN이 중지되었을 때 네트워크 인터페이스를 제거하는 스크립트도 작성해 보겠습니다.

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

다음 줄을 추가합니다.

#!/bin/sh
ifconfig $INTERFACE down

저장하고 종료합니다.

마지막으로 tinc 네트워크 스크립트를 실행 가능하게 만듭니다.

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

저장하고 종료합니다.

다른 노드로 이동하겠습니다.

internalnyc 및 ams1 구성

이러한 단계는 internalnycams1 모두에 필요하며 약간의 차이가 있습니다.

internalnyc 및 ams1에서 "netname\이라는 VPN의 구성 디렉터리 구조를 만들고 Tinc 구성 파일을 편집합니다.

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

다음 줄을 추가합니다(이름을 노드 이름으로 대체).

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

이러한 노드는 "externalnyc\(이전에 생성한 노드)에 연결을 시도하도록 구성되어 있습니다. 저장하고 종료합니다.

다음으로 호스트 구성 파일을 생성해 보겠습니다.

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

internalnyc의 경우 다음 줄을 추가합니다.

Subnet = 10.0.0.2/32

ams1의 경우 다음 줄을 추가합니다.

Subnet = 10.0.0.3/32

숫자가 다르니 참고하세요. 저장하고 종료합니다.

다음으로 키 쌍을 생성합니다.

sudo tincd -n netname -K4096

그리고 네트워크 인터페이스 시작 스크립트를 만듭니다.

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

internalnyc의 경우 다음 줄을 추가합니다.

ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

ams1의 경우 다음 줄을 추가합니다.

ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0

이 IP 주소는 VPN에서 이러한 노드에 액세스하는 방법입니다. 저장하고 종료합니다.

이제 네트워크 인터페이스 중지 스크립트를 만듭니다.

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

그리고 다음 줄을 추가합니다.

ifconfig $INTERFACE down

저장하고 종료합니다.

마지막으로 tinc 네트워크 스크립트를 실행 가능하게 만듭니다.

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

저장하고 종료합니다.

이제 호스트 구성 파일을 각 노드에 배포해야 합니다.

키 배포

구성 관리 시스템을 사용하는 경우 여기에 좋은 응용 프로그램이 있습니다. 최소한 다른 노드와 직접 통신하려는 각 노드는 호스트 구성 파일 내부에 있는 공개 키를 교환해야 합니다. 예를 들어 우리의 경우 externalnyc만 다른 노드와 공개 키를 교환하면 됩니다. 각 공개 키를 노드의 모든 구성원에게 복사하기만 하면 관리가 더 쉽습니다. internalnyc에 복사될 때 externalnyc의 호스트 구성 파일에 있는 "Address\ 값을 사설 IP 주소로 변경하여 연결이 개인 네트워크를 통해 설정됩니다.

우리 VPN은 "netname\이라고 부르기 때문에 호스트 구성 파일의 위치는 다음과 같습니다. /etc/tinc/netname/hosts

externalnyc와 internalnyc 간의 키 교환

internalnyc에서 호스트 구성 파일을 externalnyc에 복사합니다.

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

그런 다음 externalnyc에서 internalnyc의 파일을 적절한 위치에 복사합니다.

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

그런 다음 externalnyc에서 다시 호스트 구성 파일을 internalnyc에 복사합니다.

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

internalnyc에서 externalnyc의 파일을 적절한 위치에 복사합니다.

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

internalnyc에서 "Address\ 필드가 externalnyc의 개인 IP 주소로 설정되도록 externalnyc의 호스트 구성 파일을 편집해 보겠습니다. 개인 네트워크). externalnyc의 호스트 구성 파일을 편집합니다.

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

"Address\ 값을 externalnyc의 개인 IP 주소로 변경합니다.

Address = externalnyc_private_IP

저장하고 종료합니다. 이제 나머지 노드인 ams1로 이동하겠습니다.

externalnyc와 ams1 간의 키 교환

ams1에서 호스트 구성 파일을 externalnyc에 복사합니다.

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

그런 다음 externalnyc에서 ams1의 파일을 적절한 위치에 복사합니다.

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

그런 다음 externalnyc에서 다시 호스트 구성 파일을 ams1에 복사합니다.

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

ams1에서 externalnyc의 파일을 적절한 위치에 복사합니다.

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

추가 노드 간 키 교환

더 큰 VPN을 생성하는 경우 지금이 다른 노드 간에 키를 교환하기에 좋은 시기입니다. 두 노드가 서로 직접 통신하려면(사이에 전달 서버 없이) 키/호스트 구성 파일을 교환해야 하며 서로의 실제 네트워크 인터페이스에 액세스할 수 있어야 합니다. 또한 각 호스트 구성을 VPN의 모든 노드에 복사하는 것이 좋습니다.

구성 테스트

externalnyc로 시작하는 각 노드에서 다음과 같이 디버그 모드에서 Tinc를 시작합니다(netname은 VPN의 이름입니다).

sudo tincd -n netname -D -d3

각 노드에서 데몬을 시작한 후 externalnyc에 연결할 때 각 노드의 이름이 포함된 출력이 표시되어야 합니다. 이제 VPN을 통한 연결을 테스트해 보겠습니다.

ams1의 별도 창에서 internalnyc의 VPN IP 주소(앞서 10.0.0.2에 할당함)를 핑합니다.

ping 10.0.0.2

ping이 제대로 작동하고 VPN 연결에 대한 디버그 출력이 다른 창에 표시되어야 합니다. 이것은 ams1이 externalnyc를 통해 internalnyc로 VPN을 통해 통신할 수 있음을 나타냅니다. 핑을 종료하려면 CTRL-C를 누르십시오.

VPN 인터페이스를 사용하여 애플리케이션 연결, 파일 복사 및 SSH와 같은 다른 네트워크 통신을 수행할 수도 있습니다.

각 Tinc 데몬 디버그 창에서 CTRL-\\를 눌러 데몬을 종료합니다.

참고: 연결이 작동하지 않는 경우 방화벽이 연결 또는 전달을 차단하지 않는지 확인하십시오.

부팅 시 시작하도록 Tinc 구성

Tinc 초기화 스크립트가 제대로 작동하려면 VPN 이름을 nets.boot 구성 파일에 입력해야 합니다.

각 노드에서 nets.boot를 편집합니다.

sudo vi /etc/tinc/nets.boot

이 파일에 VPN 이름을 추가하십시오. 우리는 \netname입니다:

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

저장하고 종료합니다. Tinc는 이제 부팅 시 시작되도록 구성되었으며 service 명령을 통해 제어할 수 있습니다. 시작하려면 이제 각 노드에서 다음 명령을 실행하십시오.

sudo service tinc start

축하해요! Tinc VPN이 설정되었습니다.

결론

이제 이 자습서를 완료했으므로 필요에 맞게 VPN을 구축할 수 있는 좋은 기반이 있어야 합니다. Tinc는 매우 유연하며 모든 노드가 다른 노드(네트워크를 통해 액세스할 수 있음)에 연결하도록 구성할 수 있으므로 단일 노드에 의존하지 않고 메시 VPN으로 작동할 수 있습니다.

행운을 빌어요!