아 그게 뭐더라

알고하는 VPN 서버 열기 본문

공부/토막 상식

알고하는 VPN 서버 열기

뭐더라토 2020. 10. 29. 01:38

VPN. 일명 IP 바꾸기로 많이 알고들 있는 것이다. Virtual Private Network.

다들 어떤 것인지는 잘 알 테니 각설하고 VPN 서버를 만들어보자.

 

일단 트래픽을 무진장 소모시킬 공인 IP가 필요하다. 

KT 인터넷을 기숙사에 놓는 방법까지 고민했지만, 역시 돈과 전기와 소음을 고려했을때 좋은 선택은 아닌 것 같았다.

최종 선택지는 Amazon Lightsail.

 

국내 클라우드 서버 호스팅 비교: blog.lael.be/post/44
Lightsail: aws.amazon.com/free/compute/lightsail

 

사용하던 iwinv는 하루 트래픽 무료 10GB 였던 반면, Lightsail은 한달동안 3TB 트래픽 사용하는데에 10$ 밖에 안한다. 가격도 괜찮고 트래픽이 상당히 괜찮다.

 

게다가 Algo 라는 VPN 소프트웨어를 Lightsail을 통해 배포하는 한글 설명 블로그가 있어서 좋았다.

github.com/trailofbits/algo

 

trailofbits/algo

Set up a personal VPN in the cloud. Contribute to trailofbits/algo development by creating an account on GitHub.

github.com

www.44bits.io/ko/post/algo-vpn-server-on-aws-lightsail

 

클라우드에 설치하는 개인용 VPN 서버 알고(Algo)

Algo는 클라우드에 쉽게 설치해서 사용가능한 VPN 서버입니다. 이 글에서는 설치형 개인 VPN Algo의 설치 원리를 소개하고 아마존 라이트세일(Amazon Lightsail)에 배포하는 방법을 소개합니다. 그리고 iO

www.44bits.io

이것만 그대로 따라하면 설치는 굉장히 쉽다. 대충 요약하자면.

1. Algo를 설치하기 위한 준비가 마쳐진 docker container를 pull해서 가져온다.

2. docker 안에서 config 해주고, 설치한다.

3. 그러면 또 다른 amazon lightsail 인스턴스가 새롭게 "배포"되는데, 이게 Algo가 돌아가고 있는 서버이다.

 

이번에 가상머신 "배포"(Deploy)가 뭔지 그 무서움을 느꼈다. 추가로 서버 호스팅을 할 컴퓨터를 하나 만드는데, 이 서버를 만드는 과정이 전부 프로그램으로 자동화되어 있다니. 여기서 쓰이는 프로그래밍 언어(?)는 Ansible 이다. 대부분의 해외 대기업 가상서버 호스팅은 전부 지원한다고.

마크가 간지난다

 

 

어디에도 적혀있지 않은 트러블슈팅

docker:latest에 일시적으로 있는 버그일수도 있다. 

1. 먼저 설치하기 전에 docker 컨테이너에서 ./files/cloud-init/sshd_config 파일을 열어서 algo 그룹만 ssh 가능하게 해 놓은 라인을 지운다.

2. 설치하고 ubuntu 계정으로 ssh 접속한다. 이때 키는 lightsail default private key를 쓰면 된다.

3. /home/algo 에 있는 모든 파일 소유 권한을 올바르게 바꿔준다. (chown) (특히 .ssh가 600 700 으로 바꿔야 한다.)

 

고정 아이피 주기

1. Lightsail 관리 웹에서 고정아이피를 주면 바로 고정아이피로 바뀐다.

2. configs/xxx.xxx.xxx.xxx/.config.yml 에서 아이피를 바꿔주고, 폴더명과 ssh_config 파일도 고정 아이피 주소로 바꿔준다.

 

vpn 유저 추가는 깃헙 설명대로 config.cfg 바꾸고 ./algo update-users 해주면 된다.

 

======== 20.12.02 추가

그 동안 바보같이 로컬에 접속하려면 일일이 vpn을 설정하고 있었는데, 알고보니 그게 아니었다.

기본적으로 <현재 게이트웨이>/24 부분의 로컬은 자동으로 vpn을 통하지 않고 접속하게 되고,

추가로 vpn 로컬 네트워크를 vpn 없이 접속하게 하고 싶다면 아래와 같이 설정하면 된다.

출처: www.reddit.com/r/selfhosted/comments/b5pymz/split_tunnel_in_wireguard/

 

[Interface]

Address = 10.0.0.2/30, fd00::2/127

PrivateKey = yourPrivateKey

 

[Peer]

PublicKey = vpnPublicKey

AllowedIPs = 0.0.0.0/0, ::/0

Endpoint = vpn.example.com:51820

 

If you run ip route (assuming your distribution uses iproute2) you should see:

[...]

10.0.0.0/30 dev wg0 proto kernel scope link src 10.0.0.2

192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.123

 

That means that the 192.168.0.0/24 net is still reachable over the eth0 device. So your local lan should work. You can check it with ping 192.168.0.1.

If you want more IPs to not go over the VPN, for example 192.168.42.0/24 and 203.0.113.0/24, you could add the following lines to your [Interface] part of the config:

 

PostUp = ip route add 192.168.42.0/24 via 192.168.0.1; ip route add 203.0.113.0/24 via 192.168.0.1;

PreDown = ip route delete 192.168.42.0/24; ip route delete 203.0.113.0/24;

 

추가로 아마도 AllowedIPs를 수정하면 VPN을 통과할 IP를 고를 수 있는 것 같은데 이건 아직 필요가 없어서 더 찾지는 않았다.

 

======= 21.04.14 추가

AllowedIPs에 IP 설정을 하면 해당 IP와 통신하는 경우에만 VPN을 통과한다. 유용한 기능으로 지금까지 잘 사용중이다.

그리고 되도록이면 config.cfg 파일을 설정할 때 adblock list의 깃허브 링크는 주석처리해서 애드블록을 사용하지 않도록 하자. 쇼핑몰 접속시 제약사항이 많다.

Comments