Music for reading(spotify)

tinc logo

tldr: 소개부분은 넘어가고 설정 부분부터 보시면 됩니다.

본 문서는 How To Install Tinc and Set Up a Basic VPN on Ubuntu 14.04를 참조한 글입니다. tinc vpn은 강력한 full mesh routing vpn으로써 설정하기 쉽고, OpenSSL을 통한 데이터 전송으로 안전한 vpn입니다. tinc가 설명하는 tinc 소개를 봅시다.

tinc는 터널링 및 암호화를 사용하여 인터넷상의 호스트간에 보안 개인 네트워크를 만드는 VPN (Virtual Private Network) 데몬입니다. tinc는 자유 소프트웨어이며 GNU General Public License 버전 2 또는 그 이상 라이센스가 적용되어 있습니다. VPN은 IP 수준의 네트워크 코드에 일반적인 네트워크 장치로 나타나기 때문에 기존 소프트웨어를 적용 할 필요가 없습니다. 이를 통해 VPN 사이트는 다른 사람에게 정보를 노출시키지 않고 인터넷을 통해 서로 정보를 공유 할 수 있습니다. 또한 tinc에는 다음과 같은 기능이 있습니다.

말이 길지만 대충 중요한 부분만 보자면

그럼 Ubuntu에서의 tinc 설정을 알아봅시다.

목적

외부에서 접속이 불가능한 internal server에 external server와의 vpn 연결을 만들어서 접속

환경

(사설IP는 외부랑은 연결되어 있으나, 들어오지는 못하는 상황입니다.)

설치

각각의 노드에 대해 Tinc를 설치해 줍시다

sudo apt update && sudo apt install tinc

Tinc 설정

Tinc의 모든 노드는 다음과 같은 파트들이 필요합니다.

external server 설정

어디에서나 접속할 수 있는 external server부터 설정합니다. 일단 공용으로 사용할 네트워크 이름을 지정해야 합니다. (예시에서는 khala를 사용합니다. 원하는 네트워크 이름으로 편하게 바꿔서 설정하세요.)

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

다음은 tinc.conf파일을 설정합니다.

//sudo vim /etc/tinc/khala/tinc.conf
Name = external //해당 서버의 호스트 네임입니다.
AddressFamily = ipv4 //ipv6을 사용하실 경우 ipv6으로 바꾸어 주시면 됩니다.
Interface = tun0 //vpn에서 사용할 네트워크 인터페이스 이름입니다. 일반적으로 tun[Num]을 사용합니다.

다음은 호스트 설정 파일을 만들어 봅시다.

//sudo vim /etc/tinc/khala/hosts/external
Address = public_IP // external ip의 public ip를 적어줍니다.
Subnet = 10.0.0.1/32

모든 서버가 이 서버를 통해서 상호 통신하기 때문에 중요합니다.

다음은 tinc가 통신할 때 사용할 키를 생성합시다

sudo tincd -n khala -K4096

그 뒤는 service tinc start할 시에 호출할 tinc 설정을 합니다.

//sudo vim /etc/tinc/khala/tinc-up
#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0

다음은 tinc-down입니다.

//sudo vim /etc/tinc/khala/tinc-down
#!/bin/sh
ifconfig $INTERFACE down

마지막으로 해당 파일들이 실행 가능하게 합니다.

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

internal server 설정

해당 vpn에 붙일 노드들을 지정합니다. 이 노드들은 전부 internal server끼리 직접적으로 통신합니다. 불가능한 경우, external server를 통해 통신합니다. 기본적으로 노드의 설정은 external server 설정과 크게 다르지 않습니다.

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

다음은 tinc.conf파일을 설정합니다.

//sudo vim /etc/tinc/khala/tinc.conf
Name = internal //해당 서버의 호스트 네임입니다.
AddressFamily = ipv4 //ipv6을 사용하실 경우 ipv6으로 바꾸어 주시면 됩니다.
Interface = tun0 //vpn에서 사용할 네트워크 인터페이스 이름입니다. 일반적으로 tun[Num]을 사용합니다.
ConnectTo = external //노드끼리 통신이 불가능한 경우 통할 external server를 지정합니다.

ConnectTo에 유의해 주십시오. external server에는 없던 내용입니다.

다음은 호스트 설정 파일을 만들어 봅시다.

//sudo vim /etc/tinc/khala/hosts/external
Subnet = 10.0.0.2/32

다음은 tinc가 통신할 때 사용할 키를 생성합시다

sudo tincd -n khala -K4096

그 뒤는 service tinc start할 시에 호출할 tinc 설정을 합니다.

//sudo vim /etc/tinc/khala/tinc-up
#!/bin/sh
ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

다음은 tinc-down입니다.

//sudo vim /etc/tinc/khala/tinc-down
#!/bin/sh
ifconfig $INTERFACE down

마지막으로 해당 파일들이 실행 가능하게 합니다.

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

주의 서브넷 네트워크의 ip의 맨 뒤의 숫자가 변함을 주의하십시오. 새로운 노드가 생성되면, 뒤의 숫자를 하나씩 늘려가며 달아주면 됩니다.

키 교환

external server와 internal server의 키를 서로 공유해줘야 합니다. 서로의 /etc/tinc/host/{hostname}/etc/tinc/host에 넣어주면 됩니다. 만약 internal server와 외부 네트워크가 완전히 단절되어 있다면, /etc/tinc/host/external안의 Address를 external server의 내부 IP로 적어주시면 됩니다.

테스트

테스트를 해 봅시다. 일단 혹시 모를 데몬을 꺼줍시다.

sudo service tinc stop

그 후 external server부터 해당 명령어를 실행하여 서로 네트워크가 연결되는지 봅시다.

sudo tincd -n khala -D -d3

설정이 잘 됐다면, 서로 핑을 주고받는 모습을 볼 수 있을 겁니다. SIGINT로 종료하고 나와줍시다.

부팅 시 tinc 네트워크 실행하기

모든 노드에 대해 적용합니다.

// sudo vim /etc/tinc/nets.boot
khala

시작

sudo service tinc start

마치며

여기까지 완료하셨으면 tinc vpn 설정을 완료한 것입니다. 저도 가끔 헷갈리고 매번 찾기도 귀찮아서 정리해 보았습니다. 필요하신 분들은 잘 써주셨으면 좋겠습니다. 감사합니다.