트래픽을 원하는 경로로! tailscale의 subnet router
이전 글에서 tailscale 서비스에 대해서 소개했는데요. tailscale의 기능 중에 가장 잘 사용하고 있고, 만족도가 높은 Subnet Router https://tailscale.com/kb/1019/subnets/ 기능에 대해서 간단히 이야기 해보려고 해요. Subnet Router는 tailscale 로 묶여있는 tailscale network에서 특정 subnet 대역으로 가는 모든 트래픽을 `Subnet Router로 설정한 장비` 를 통해서 전송할 수 있도록 해줘요. 예를들면 tailscale로 묶여있는 장비에서 192.168.0.0/16 으로 접근하는 모든 요청은 `Subnet Router로 설정한 A 장비` 를 통해서 접근할 수 있는데요. 개인 사용자의 예를 들면 마치 집 밖에서도 Home Network내부에 내 장비를 밀어넣은 것 처럼 사용할 수 있어요. 특정 Subnet으로 나가는 트래픽을 모두 특정 디바이스로 묶을 수 있기 때문에... CIDR 규칙을 통해서 쉽게 네트웍 트래픽 경로를 정의할 수 있어요. 예를들면 AWS ap-northeast-1 도쿄 리전에 EC2 인스턴스를 하나 올리고, 해당 인스턴스에 tailscale 을 설치한 뒤에 `특정 IP 대역으로 나가는 요청` 은 이 도쿄 인스턴스를 통해서만 전송되도록 Subnet Router 설정을 할 수 도 있어요. 조금 더 생각해보면 특정 VPN 망에 연결한 PC나 서버의 네트웍을 tailscale network으로 묶인 다른 client들에 공유할 수도 있어요. VPN 대상 subnet을 subnet router로 걸어주고, VPN에 연결된 PC/서버를 통해 공유할 수 있는거죠. 예제처럼 모든 tailscale 유저가 아닌 그룹의 특정 유저에게만 ACL(access control list) 을 걸 수 있어서 개인 뿐 아니라, 왠만한 규모의 회사에서도 잘 활용할 수 있지 않을까 생각이 드는 기능이에요. ``` { "groups": { "group:dev": ["alice@example.com", "bob@example.com"] }, "acls": [ // Users in group:dev and devices in subnets 10.0.0.0/24 and // 10.0.1.0/24 can access devices in subnets 10.0.0.0/24 and // 10.0.1.0/24 { "action": "accept", "src": ["group:dev","10.0.0.0/24", "10.0.1.0/24"], "dst": ["10.0.0.0/24:*", "10.0.1.0/24:*"] } ] } ``` 저는 Asrock a300 이나 Dell wyse5060과 같은 미니 PC 들을 몇개 구해서 proxmox cluster로 묶어서 개인 공부 서버 등으로 사용하는데, tailscale 그리고 tailscale의 subnet router기능에 정말 만족하고 있어서, 비슷한 분야(?)에 관심을 가진 분들이 있다면 꼭 추천드리고 싶어요.