웹사이트 검색

Ubuntu 16.04 LTS에 Tinc를 사용하여 VPN 설치


이 페이지에서

  1. 사전 요구 사항\n
  2. 목표\n
  3. Tinc 설치
  4. 구성
    1. externalnyc 구성
    2. internalnyc 및 ams1 구성

    1. externalnyc와 internalnyc 간의 키 교환\n
    2. externalnyc와 ams1 간의 키 교환\n

    VPN(가상 사설망)은 인터넷과 같은 대규모 공용 네트워크에서 작동하는 안전한 사설망입니다. VPN은 비싸고 복잡한 새 하드웨어를 설정할 필요 없이 향상된 보안 및 개인 정보 보호 기능을 제공하기 때문에 최근 몇 년 동안 점점 인기를 얻고 있습니다. 또한 네트워킹 및 지원 비용 감소를 비롯한 몇 가지 다른 이점도 제공합니다.

    VPN은 공용 네트워크를 통해 암호화된 터널을 만들고 이를 사용하여 서버와 터미널 간에 데이터를 안전하게 전송하는 방식으로 작동합니다. 이러한 연결은 다양한 방법으로 암호화될 수 있으며 아키텍처, 예산 및 경험 수준에 맞는 다양한 VPN 클라이언트 및 데몬이 있습니다.

    Tinc는 그러한 솔루션 중 하나입니다(1). 오픈 소스 VPN 데몬으로 이제 다양한 플랫폼에서 사용할 수 있으며 유사한 VPN 클라이언트에 비해 몇 가지 장점이 있습니다. 안전하고 신뢰할 수 있는 암호화, 선택적 압축을 제공하며 네트워크 성장에 따라 쉽게 확장할 수 있습니다. 자동 전체 메시 라우팅은 VPN 트래픽이 중간 전송을 거치지 않고 항상(가능한 경우 항상) 대상 시스템으로 직접 전송됨을 의미하며, 이는 데이터 도난 가능성을 제한하여 보안을 크게 향상시킵니다(3). 또한 Tinc VPN은 IP 레벨 네트워크 코드에 일반 네트워크 장치로 나타나기 때문에 Tinc VPN을 설정한 후 기존 소프트웨어를 조정할 필요가 없습니다. 따라서 Tinc VPN은 본질적으로 확장 가능합니다.

    Tinc의 유일한 사소한 문제는 일부 사람들이 설정하기가 약간 까다롭다는 것입니다. 그것이 당신처럼 들린다면 걱정하지 마십시오. 오늘 Tinc VPN을 서버에서 실행하는 번거로움 없는 방법을 안내해 드리겠습니다.

    전제 조건

    이 자습서를 완전히 따르려면 최소 3개의 Ubuntu 16.04 서버와 각 컴퓨터에 대한 루트 액세스 권한이 필요합니다. 이것이 없거나 이것이 무엇을 의미하는지 확실하지 않은 경우 이 자습서는 귀하를 위한 것이 아닙니다. 먼저 Ubuntu를 사용하여 서버를 설정하는 방법을 확인해야 합니다(2).

    처음부터 서버 시스템을 구축하는 경우 먼저 시스템이 서로 통신하는 방법에 대해 생각해야 합니다. 이 자습서에서는 대부분의 사람들이 선택할 것으로 생각되는 변수 이름을 사용하지만 자신의 설정에 맞게 일부 변수 이름을 조정해야 할 수도 있습니다.

    이 튜토리얼을 정확히 따르려면 먼저 동일한 데이터 센터에 두 개의 VPS를 설정한 다음 두 번째 데이터 센터에 세 번째 VPS를 만들어야 합니다. 내 데이터 센터는 두 개의 VPS가 있는 NYC2와 세 번째 VPS가 있는 AMS2라고 합니다. 이러한 VPS는 다음과 같이 불립니다.

    externalnyc – 모든 VPN 노드가 이 서버에 연결됩니다. 즉, 네트워크가 제대로 작동하려면 연결 상태를 유지하고 사용 가능한 상태를 유지해야 합니다. 결국 설정에 추가 서버를 추가하려면 externalnyc와 동일한 방식으로 설정해야 합니다.

    internalnyc – 이 VPS는 사설 네트워크 인터페이스를 사용하여 externalnyc VPN 노드에 연결합니다.

    ams1 – 퍼블릭 VPN 연결입니다. 공용 인터넷을 사용하여 externalnyc에 연결합니다.

    목표

    우리가 달성하고자 하는 것은 다음과 같습니다.

    우리의 개인 네트워크는 녹색 선으로 표시되며 세 서버를 모두 연결합니다. 주황색은 두 개의 NYC2 서버를 함께 연결하는 개인 네트워크입니다. 세 서버 모두 VPN을 통해 연결할 수 있지만 사설 네트워크는 AMS1에 액세스할 수 없습니다.

    이렇게 하려면 다음 단계를 따르십시오.

    Tinc 설치

    먼저 Tinc를 설치해야 합니다. 언제나처럼 다음을 실행하여 모든 apt 저장소가 최신 상태인지 확인하세요.

    sudo apt-get update

    그런 다음 apt를 통해 표준 방식으로 Tinc를 설치합니다.

    sudo apt-get install tinc

    그리고 그게 다야! 이제 컴퓨터가 Tinc와 필요한 전제 조건을 다운로드합니다. 이제 구성을 살펴봐야 합니다.

    구성

    Tinc 구성은 익숙한 다른 VPN과 약간 다를 수 있습니다. 이것은 "netname\을 사용하여 하나의 VPN을 다른 VPN과 구별합니다. 이것은 Tinc를 통해 여러 VPN이 실행될 때 매우 유용하지만 처음에는 약간 직관적이지 않습니다. 이것은 우리의 첫 번째 Tinc 네트워크이므로 간단하게 유지하고 저희 VPN을 "netname\이라고 부르세요.

    이제 각 서버에 대해. 각각에는 세 가지 구성 요소가 필요합니다.

    구성 파일: tinc.conf, tinc-up, tinc-down 및 선택적 개수의 기타 파일.

    공개 및 개인 키 쌍: 암호화 및 인증용입니다.

    호스트 구성 파일: 여기에는 공개 키 및 기타 VPN 구성 요소가 포함됩니다.

    이제 각 서버를 차례로 구성하겠습니다. 먼저 externalnyc입니다.

    externalnyc 구성

    자, 이제 너트와 볼트입니다. externalnyc에서 VPN 네트이름에 대한 구성 디렉토리 구조를 생성하여 시작합니다. 달리다:

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

    이제 선택한 텍스트 편집기에서 tinc.conf를 엽니다.

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

    파일이 준비되면 파일 맨 아래에 다음을 추가하십시오.

    Name = externalnyc
    AddressFamily = ipv4
    Interface = tun0

    여기에서 하는 일은 externalnyc라는 노드를 구성하고 네트워크 인터페이스가 ipv4를 사용하고 \tun0\이라고 하는 이름을 서버에 알리는 것입니다. 파일을 저장하고 닫습니다.

    다음으로 externalnyc에 대한 호스트 구성 파일을 생성해야 합니다. 이렇게 하려면 텍스트 편집기에서 호스트 구성 파일을 엽니다.

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

    다시 이 파일의 맨 아래에 몇 줄을 추가하고 첫 번째 줄에서 VPS의 공용 IP 주소를 대체합니다.

    Address = externalnyc_public_IP
    Subnet = 10.0.0.1/32

    이것은 다른 서버가 externalnyc에 연결하는 데 사용할 파일입니다. 주소는 다른 노드에게 이 서버에 연결하는 방법과 위치를 알려주고 서브넷 주소는 이 데몬이 작동할 서브넷입니다. 다시 이 파일에 대한 변경 사항을 저장하고 닫습니다.

    이제 이 호스트에 대한 공개/개인 키 쌍을 생성해야 합니다. 이것은 충분히 쉽습니다. 다음을 실행하십시오.

     sudo tincd -n netname -K4096

    이것은 개인 RSA 키를 만들고 방금 만든 구성 파일의 끝에 공개 키 쌍을 추가합니다. 원하는 경우 다시 열어 이 작업이 완료되었는지 확인할 수 있습니다.

    이제 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에서 externalnyc의 IP는 10.0.0.1입니다.

    하지만 VPN이 중지되면 이 네트워크 인터페이스가 사라지기를 원하므로 스크립트가 하나 더 필요합니다. 이것은 tinc-down에 추가되어야 합니다. 열려 있는:

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

    그런 다음 다음을 추가하십시오.

    #!/bin/sh
    ifconfig $INTERFACE down

    그리고 다시 저장하고 종료합니다. 이제 스크립트가 있지만 작동하려면 실행 가능한 것으로 표시되어야 합니다. 명령줄을 사용하면 충분히 쉽습니다.

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

    저장하고 종료하면 이 서버 구성이 완료됩니다. 다음은 internalnyc 및 ams1입니다.

    internalnyc 및 ams1 구성

    나머지 두 서버를 구성하려면 각 시스템에서 동일한 명령을 실행해야 합니다. 몇 가지 사소한 변형이 있습니다. 제가 지적하겠지만 프로세스는 기본적으로 동일합니다.

    위의 externalnyc에서 했던 것처럼 먼저 구성 파일의 디렉토리 구조를 만들어야 합니다. 각 서버에서 다음을 실행한 다음 편집을 위해 Tinc 구성 파일을 엽니다.

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

    그런 다음 이 파일의 맨 아래에 "node_name\을 각 노드의 이름으로 대체하여 몇 줄을 추가합니다.

    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

    그러나 위에서 다른 주소를 지정한 경우 여기에서도 변경하십시오. 이 파일을 저장하고 종료하십시오. 거의 다 왔습니다.

    이전과 같이 네트워크 인터페이스 중지 스크립트를 만들기만 하면 됩니다.

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

    그런 다음 두 서버에 다음 줄을 추가합니다.

    ifconfig $INTERFACE down

    그리고 구성의 마지막 부분은 새 스크립트를 실행 가능하게 만드는 것입니다.

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

    저장하고 종료합니다. 휴. 모든 것이 잘 되었다면 이제 세 개의 서버가 모두 구성된 것입니다. 이제 암호화를 구현합니다.

    키 배포

    이미 구성 관리 시스템을 사용하고 있다면 운이 좋을 것입니다. 이상적인 세상에서 우리가 지금 만든 각 노드는 공개/개인 키 인터페이스를 사용하여 다른 노드와 직접 대화할 수 있어야 합니다. 위에서 본 것처럼 키는 이제 각 서버의 호스트 구성 파일에 있습니다. 여기서 만들고 있는 간단한 네트워크에서는 실제로 externalnyc만 다른 노드와 키를 교환하면 됩니다.

    따라서 이를 수행하는 가장 쉬운 방법은 각 공개 키를 다양한 노드의 모든 구성원에 복사하는 것입니다. 이것은 실제로 매우 쉽습니다. 복사할 때 externalnyc의 구성 파일에 있는 "address\ 값을 자신의 사설 IP 주소로 변경하는 데 주의하십시오. 이렇게 하면 사설 네트워크를 통해 연결이 설정됩니다.

    나를 팔로우하고 VPN을 "netname\이라고 불렀다면 호스트 구성 파일은 다음과 같습니다. /etc/tinc/netname/hosts

    externalnyc와 internalnyc 간의 키 교환

    이것은 간단합니다. internalnyc에서 호스트 구성 파일을 찾아 externalnyc에 복사합니다.

     scp /etc/tinc/netname/hosts/internalnyc _private_IP:/tmp

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

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

    이제 우리는 반대 절차를 수행합니다. externalnyc에서 호스트 구성 파일을 internalnyc에 복사합니다.

     scp /etc/tinc/netname/hosts/externalnyc _private_IP:/tmp

    그런 다음 internalnyc에서 파일을 올바른 위치에 복사합니다.

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

    이제 주소가 정확하도록 internalnyc에서 externalnyc의 호스트 구성 파일을 편집해야 합니다. 이렇게 하면 노드가 사설 네트워크를 통해 VPN에 연결됩니다. 따라서 internalnyc에서 externalnyc에 대한 호스트 구성 파일을 엽니다.

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

    그리고 다음과 같이 주소 값을 externalnyc의 사설 IP 주소로 변경합니다.

    Address = externalnyc_private_IP

    파일을 저장하고 종료합니다. 이렇게 두 개의 키가 완료되었습니다. 이제 남은 하나의 노드와 키를 교환하기만 하면 됩니다.

    externalnyc와 ams1 간의 키 교환

    여기서 프로세스는 매우 유사합니다. ams1을 사용하여 hosts 구성 파일을 externalnyc에 복사합니다.

     scp /etc/tinc/netname/hosts/ams1 _public_IP:/tmp

    그런 다음 다시 externalnyc를 사용하여 올바른 위치에 복사합니다.

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

    externalnyc에 있는 상태에서 다른 방법으로 파일을 ams1에 복사합니다.

     scp /etc/tinc/netname/hosts/externalnyc _public_IP:/tmp

    다시 한 번 ams1에서 이 파일을 올바른 위치에 복사합니다.

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

    그러면 키 교환이 완료됩니다. 이론적으로 이제 Tinc를 통해 작동하는 암호화된 VPN을 갖게 되었습니다. 이 튜토리얼을 끝까지 따라했다면 설정 테스트로 넘어갈 수 있습니다. 그러나 추가 노드를 추가할 기회도 얻었다면 지금이 필요한 모든 키를 교환할 적기입니다.

    내가 여기에서 하는 것처럼 중앙 노드를 사용하는 경우 모든 키를 모든 서버에 복사할 필요가 없음을 기억하십시오. 그러나 노드가 서로 직접 대화할 수 있게 하려면 키를 교환해야 합니다. 이 작업을 수행하는 프로세스는 위에서 설명한 것과 동일합니다. 원하는 연결을 달성하는 데 필요한 만큼 반복하면 됩니다.

    테스트

    이제 테스트할 준비가 되었습니다. 이렇게 하려면 디버그 모드에서 Tinc를 시작하는 것이 좋습니다. 그러면 오류를 포착하고 문제가 발생하면 더 많은 정보를 얻을 수 있습니다. 잘못 구성된 VPN은 실제로 보안 위험이 될 수 있으므로 중요한 작업에 VPN을 사용하기 전에 모든 것이 제대로 작동하는지 확인하십시오.

    디버그 모드에서 Tinc를 시작하려면 각 노드에서 externalnyc로 시작하여 다음을 실행합니다.

     sudo tincd -n netname -D -d3

    VPN을 다른 이름으로 지정한 경우에는 "netname\ 변수를 적절한 이름으로 변경하십시오.

    데몬이 각 노드에서 시작된 후 연결될 때 각 노드의 이름을 제공하는 출력을 반환해야 합니다. 이것이 일어나지 않으면 어딘가에 실수를 한 것입니다.

    이제 VPN을 테스트할 수 있습니다. ams1의 새 창에서 해당 IP 주소를 사용하여 internalnyc를 핑합니다. 이전에 이것을 10.0.0.2에 할당했으므로 다음을 입력합니다.

     ping 10.0.0.2

    바라건대, 귀하의 핑이 작동할 것입니다. 또한 방금 만든 연결을 설명하는 일부 디버깅 출력이 다른 창에 표시되어야 합니다. 이제 Ams1이 새 VPN을 통해 externalnyc에 연결되었으며 이를 통해 internalnyc에 연결할 수 있습니다. CTRL-C를 누르면 ping이 중지됩니다.

    이제 안전한 VPN 연결이 생겼습니다. 애플리케이션 연결, 파일 복사, SSH 또는 기타 원하는 모든 유형의 네트워크 통신에 이를 사용할 수 있습니다.

    ping이 작동하지 않지만 모든 작업을 제대로 수행했다고 생각한다면 방화벽이 방해가 되었을 수 있습니다. 방화벽 설정을 확인하고 다시 시도하십시오.

    부팅시 Tinc

    마지막으로 한 가지만. 이제 모든 네트워킹에 Tinc VPN을 사용하려는 경우 부팅 시 시작되도록 설정하는 것이 좋습니다. 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가 작동하며 부팅 시 시작됩니다. 잘했어.

    Tinc를 제어해야 하는 경우 이제 "service\ 명령을 실행하여 제어할 수 있습니다. 각 노드에서 다음을 실행하십시오.

     sudo service tinc start

    그리고 놀아보세요. 이 명령을 통해 가장 기본적인 제어를 수행할 수 있습니다.

    결론

    이제 모든 컴퓨터에서 Tinc를 통해 실행되는 보안 VPN 연결이 있어야 합니다. 이 VPN은 추가 네트워크 기능을 구축하기 위한 기반으로 사용할 수 있습니다.

    나중에 노드를 더 추가하거나 Tinc를 다른 VPN과 결합하려는 경우 Tinc에서 이를 수행할 수 있습니다. 각 추가 노드에 대한 프로세스는 위에서 설명한 것과 동일하며 어떤 변수와 주소를 변경해야 하는지 쉽게 확인할 수 있어야 합니다. 노드가 서로 직접 연결되도록 하려면 노드 간에 직접 키를 교환해야 한다는 점을 기억하십시오. 이와 같이 Tinc는 메쉬 VPN으로 작동하며 내 접근 방식보다 조금 더 안전합니다. 그렇지 않으면 내가 한 것처럼 네트워크를 설정하고 모든 것이 중앙 노드를 통과하도록 할 수 있습니다.

    어느 쪽이든, 이제 자유롭게 놀 수 있습니다. 행운을 빌어요!

    자원

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

    (2) https://linux-console.net/tutorial/ubuntu-lts-minimal-server/