From be5c7d9b2e0b211c76ca4839f8d261626a9ad779 Mon Sep 17 00:00:00 2001 From: zhanglixing Date: Thu, 28 Aug 2025 18:26:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20tailscale=20=E7=9A=84?= =?UTF-8?q?=E5=8A=A8=E6=80=81=20ip=20=E5=9C=B0=E5=9D=80=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ACL4SSR_Online_Full_Mannix.ini | 1 + Rules/ChinaOnly.list | 3 + Rules/Tailscale.list | 89 ++++ generate_tailscale_rules.py | 73 +++ tailscale.json | 936 +++++++++++++++++++++++++++++++++ 5 files changed, 1102 insertions(+) create mode 100644 Rules/Tailscale.list create mode 100644 generate_tailscale_rules.py create mode 100644 tailscale.json diff --git a/ACL4SSR_Online_Full_Mannix.ini b/ACL4SSR_Online_Full_Mannix.ini index d634340..2b34522 100644 --- a/ACL4SSR_Online_Full_Mannix.ini +++ b/ACL4SSR_Online_Full_Mannix.ini @@ -344,6 +344,7 @@ ruleset=💩 ‍广告,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/ ruleset=DIRECT,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/LocalAreaNetwork.list ruleset=DIRECT,https://gitea.178494.xyz/zhanglixing/ACL4SSR/raw/branch/main/Rules/ChinaOnly.list +ruleset=DIRECT,https://gitea.178494.xyz/zhanglixing/ACL4SSR/raw/branch/main/Rules/Tailscale.list ruleset=DIRECT,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/RemoteDesktop.list ruleset=DIRECT,https://gitea.178494.xyz/zhanglixing/ACL4SSR/raw/branch/main/Rules/fdeal.list ruleset=🛩️ ‍墙内,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/UnBan.list diff --git a/Rules/ChinaOnly.list b/Rules/ChinaOnly.list index a85d60e..9eca022 100644 --- a/Rules/ChinaOnly.list +++ b/Rules/ChinaOnly.list @@ -18,6 +18,9 @@ IP-CIDR,2606:B740:49::/48 DOMAIN-SUFFIX,tailscale.com DOMAIN-SUFFIX,ts.net +# 规则 4 :一些识别出的 IP +IP-CIDR,68.183.80.0/20 + #todesk 腾讯云服务器 IP-CIDR,111.230.0.0/15,no-resolve IP-CIDR,175.178.0.0/16,no-resolve \ No newline at end of file diff --git a/Rules/Tailscale.list b/Rules/Tailscale.list new file mode 100644 index 0000000..0e49b21 --- /dev/null +++ b/Rules/Tailscale.list @@ -0,0 +1,89 @@ +# Tailscale DERP Servers - Direct Connection Rules +# Generated from tailscale.json +# All Tailscale DERP relay servers should use direct connection + +IP-CIDR,102.67.165.185/32 +IP-CIDR,102.67.165.36/32 +IP-CIDR,102.67.165.90/32 +IP-CIDR,102.67.167.188/32 +IP-CIDR,102.67.167.245/32 +IP-CIDR,102.67.167.37/32 +IP-CIDR,103.6.84.152/32 +IP-CIDR,103.84.155.178/32 +IP-CIDR,103.84.155.188/32 +IP-CIDR,103.84.155.46/32 +IP-CIDR,157.180.28.32/32 +IP-CIDR,162.248.221.199/32 +IP-CIDR,162.248.221.215/32 +IP-CIDR,162.248.221.248/32 +IP-CIDR,167.235.72.200/32 +IP-CIDR,172.237.61.190/32 +IP-CIDR,172.237.61.194/32 +IP-CIDR,172.237.61.197/32 +IP-CIDR,176.58.88.183/32 +IP-CIDR,176.58.90.104/32 +IP-CIDR,176.58.90.147/32 +IP-CIDR,176.58.90.207/32 +IP-CIDR,176.58.92.144/32 +IP-CIDR,176.58.92.254/32 +IP-CIDR,176.58.93.147/32 +IP-CIDR,176.58.93.154/32 +IP-CIDR,176.58.93.248/32 +IP-CIDR,178.156.134.232/32 +IP-CIDR,178.156.152.106/32 +IP-CIDR,178.156.152.91/32 +IP-CIDR,185.34.3.207/32 +IP-CIDR,185.34.3.232/32 +IP-CIDR,185.34.3.75/32 +IP-CIDR,185.40.234.113/32 +IP-CIDR,185.40.234.219/32 +IP-CIDR,185.40.234.53/32 +IP-CIDR,185.40.234.77/32 +IP-CIDR,192.73.240.121/32 +IP-CIDR,192.73.240.132/32 +IP-CIDR,192.73.240.161/32 +IP-CIDR,192.73.242.187/32 +IP-CIDR,192.73.242.204/32 +IP-CIDR,192.73.242.28/32 +IP-CIDR,192.73.243.135/32 +IP-CIDR,192.73.243.141/32 +IP-CIDR,192.73.243.229/32 +IP-CIDR,192.73.244.245/32 +IP-CIDR,192.73.248.83/32 +IP-CIDR,192.73.252.134/32 +IP-CIDR,192.73.252.65/32 +IP-CIDR,199.38.181.103/32 +IP-CIDR,199.38.181.104/32 +IP-CIDR,199.38.181.93/32 +IP-CIDR,199.38.182.118/32 +IP-CIDR,205.147.105.30/32 +IP-CIDR,205.147.105.78/32 +IP-CIDR,208.111.34.178/32 +IP-CIDR,208.111.40.12/32 +IP-CIDR,208.111.40.216/32 +IP-CIDR,208.72.155.133/32 +IP-CIDR,208.83.233.233/32 +IP-CIDR,208.83.234.151/32 +IP-CIDR,209.177.145.120/32 +IP-CIDR,209.177.156.197/32 +IP-CIDR,209.177.156.94/32 +IP-CIDR,209.177.158.15/32 +IP-CIDR,209.177.158.246/32 +IP-CIDR,43.245.48.220/32 +IP-CIDR,43.245.48.250/32 +IP-CIDR,43.245.48.50/32 +IP-CIDR,43.245.49.105/32 +IP-CIDR,43.245.49.144/32 +IP-CIDR,43.245.49.83/32 +IP-CIDR,45.159.97.144/32 +IP-CIDR,45.159.97.233/32 +IP-CIDR,45.159.97.61/32 +IP-CIDR,45.159.98.145/32 +IP-CIDR,45.159.98.196/32 +IP-CIDR,45.159.98.253/32 +IP-CIDR,49.12.193.137/32 +IP-CIDR,49.13.204.141/32 +IP-CIDR,5.161.218.233/32 +IP-CIDR,65.109.143.62/32 +IP-CIDR,68.183.90.120/32 +IP-CIDR,95.217.2.165/32 diff --git a/generate_tailscale_rules.py b/generate_tailscale_rules.py new file mode 100644 index 0000000..69beb5b --- /dev/null +++ b/generate_tailscale_rules.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +""" +Script to extract Tailscale DERP server IPv4 addresses from tailscale.json +and generate a Clash rule list file for direct connection. +""" + +import json +import ipaddress +from pathlib import Path + +def load_tailscale_data(json_file): + """Load tailscale.json data""" + with open(json_file, 'r', encoding='utf-8') as f: + return json.load(f) + +def extract_ipv4_addresses(data): + """Extract all IPv4 addresses from tailscale regions data""" + ipv4_addresses = set() + + for region_id, region_data in data['Regions'].items(): + for node in region_data.get('Nodes', []): + ipv4 = node.get('IPv4') + if ipv4: + try: + # Validate IPv4 address + ipaddress.IPv4Address(ipv4) + ipv4_addresses.add(ipv4) + except ipaddress.AddressValueError: + print(f"Invalid IPv4 address: {ipv4}") + + return sorted(ipv4_addresses) + +def generate_clash_rules(ipv4_addresses, output_file): + """Generate Clash rule list file""" + with open(output_file, 'w', encoding='utf-8') as f: + f.write("# Tailscale DERP Servers - Direct Connection Rules\n") + f.write("# Generated from tailscale.json\n") + f.write("# All Tailscale DERP relay servers should use direct connection\n\n") + + for ip in ipv4_addresses: + f.write(f"IP-CIDR,{ip}/32\n") + +def main(): + json_file = Path("tailscale.json") + output_file = Path("Rules/Tailscale.list") + + if not json_file.exists(): + print(f"Error: {json_file} not found") + return + + # Create Rules directory if it doesn't exist + output_file.parent.mkdir(exist_ok=True) + + try: + # Load tailscale data + data = load_tailscale_data(json_file) + + # Extract IPv4 addresses + ipv4_addresses = extract_ipv4_addresses(data) + + print(f"Found {len(ipv4_addresses)} unique IPv4 addresses") + + # Generate Clash rules + generate_clash_rules(ipv4_addresses, output_file) + + print(f"Generated {output_file} successfully!") + print(f"Rules created for {len(ipv4_addresses)} Tailscale DERP server IPs") + + except Exception as e: + print(f"Error: {e}") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tailscale.json b/tailscale.json new file mode 100644 index 0000000..0673f8c --- /dev/null +++ b/tailscale.json @@ -0,0 +1,936 @@ +{ + "Regions": { + "1": { + "RegionID": 1, + "RegionCode": "nyc", + "RegionName": "New York City", + "Latitude": 40.7128, + "Longitude": -74.006, + "Nodes": [ + { + "Name": "1f", + "RegionID": 1, + "HostName": "derp1f.tailscale.com", + "IPv4": "199.38.181.104", + "IPv6": "2607:f740:f::bc", + "CanPort80": true + }, + { + "Name": "1g", + "RegionID": 1, + "HostName": "derp1g.tailscale.com", + "IPv4": "209.177.145.120", + "IPv6": "2607:f740:f::3eb", + "CanPort80": true + }, + { + "Name": "1h", + "RegionID": 1, + "HostName": "derp1h.tailscale.com", + "IPv4": "199.38.181.93", + "IPv6": "2607:f740:f::afd", + "CanPort80": true + }, + { + "Name": "1i", + "RegionID": 1, + "HostName": "derp1i.tailscale.com", + "IPv4": "199.38.181.103", + "IPv6": "2607:f740:f::e19", + "CanPort80": true + } + ] + }, + "10": { + "RegionID": 10, + "RegionCode": "sea", + "RegionName": "Seattle", + "Latitude": 47.609722, + "Longitude": -122.333056, + "Nodes": [ + { + "Name": "10b", + "RegionID": 10, + "HostName": "derp10b.tailscale.com", + "IPv4": "192.73.240.161", + "IPv6": "2607:f740:14::61c", + "CanPort80": true + }, + { + "Name": "10c", + "RegionID": 10, + "HostName": "derp10c.tailscale.com", + "IPv4": "192.73.240.121", + "IPv6": "2607:f740:14::40c", + "CanPort80": true + }, + { + "Name": "10d", + "RegionID": 10, + "HostName": "derp10d.tailscale.com", + "IPv4": "192.73.240.132", + "IPv6": "2607:f740:14::500", + "CanPort80": true + } + ] + }, + "11": { + "RegionID": 11, + "RegionCode": "sao", + "RegionName": "São Paulo", + "Latitude": -23.55, + "Longitude": -46.633333, + "Nodes": [ + { + "Name": "11e", + "RegionID": 11, + "HostName": "derp11e.tailscale.com", + "IPv4": "172.237.61.194", + "IPv6": "2600:3c0d::2000:d2ff:fe43:1790", + "CanPort80": true + }, + { + "Name": "11f", + "RegionID": 11, + "HostName": "derp11f.tailscale.com", + "IPv4": "172.237.61.197", + "IPv6": "2600:3c0d::2000:3bff:fe44:6166", + "CanPort80": true + }, + { + "Name": "11g", + "RegionID": 11, + "HostName": "derp11g.tailscale.com", + "IPv4": "172.237.61.190", + "IPv6": "2600:3c0d::2000:62ff:febe:2e67", + "CanPort80": true + } + ] + }, + "12": { + "RegionID": 12, + "RegionCode": "ord", + "RegionName": "Chicago", + "Latitude": 41.881944, + "Longitude": -87.627778, + "Nodes": [ + { + "Name": "12d", + "RegionID": 12, + "HostName": "derp12d.tailscale.com", + "IPv4": "209.177.158.246", + "IPv6": "2607:f740:e::811", + "CanPort80": true + }, + { + "Name": "12e", + "RegionID": 12, + "HostName": "derp12e.tailscale.com", + "IPv4": "209.177.158.15", + "IPv6": "2607:f740:e::b17", + "CanPort80": true + }, + { + "Name": "12f", + "RegionID": 12, + "HostName": "derp12f.tailscale.com", + "IPv4": "199.38.182.118", + "IPv6": "2607:f740:e::4c8", + "CanPort80": true + } + ] + }, + "13": { + "RegionID": 13, + "RegionCode": "den", + "RegionName": "Denver", + "Latitude": 39.7392, + "Longitude": -104.9849, + "Nodes": [ + { + "Name": "13b", + "RegionID": 13, + "HostName": "derp13b.tailscale.com", + "IPv4": "192.73.242.187", + "IPv6": "2607:f740:16::640", + "CanPort80": true + }, + { + "Name": "13c", + "RegionID": 13, + "HostName": "derp13c.tailscale.com", + "IPv4": "192.73.242.28", + "IPv6": "2607:f740:16::5c", + "CanPort80": true + }, + { + "Name": "13d", + "RegionID": 13, + "HostName": "derp13d.tailscale.com", + "IPv4": "192.73.242.204", + "IPv6": "2607:f740:16::c23", + "CanPort80": true + } + ] + }, + "14": { + "RegionID": 14, + "RegionCode": "ams", + "RegionName": "Amsterdam", + "Latitude": 52.372778, + "Longitude": 4.893611, + "Nodes": [ + { + "Name": "14b", + "RegionID": 14, + "HostName": "derp14b.tailscale.com", + "IPv4": "176.58.93.248", + "IPv6": "2a00:dd80:3c::807", + "CanPort80": true + }, + { + "Name": "14c", + "RegionID": 14, + "HostName": "derp14c.tailscale.com", + "IPv4": "176.58.93.147", + "IPv6": "2a00:dd80:3c::b09", + "CanPort80": true + }, + { + "Name": "14d", + "RegionID": 14, + "HostName": "derp14d.tailscale.com", + "IPv4": "176.58.93.154", + "IPv6": "2a00:dd80:3c::3d5", + "CanPort80": true + } + ] + }, + "15": { + "RegionID": 15, + "RegionCode": "jnb", + "RegionName": "Johannesburg", + "Latitude": -26.204444, + "Longitude": 28.045556, + "Nodes": [ + { + "Name": "15b", + "RegionID": 15, + "HostName": "derp15b.tailscale.com", + "IPv4": "102.67.165.90", + "IPv6": "2c0f:edb0:0:10::963", + "CanPort80": true + }, + { + "Name": "15c", + "RegionID": 15, + "HostName": "derp15c.tailscale.com", + "IPv4": "102.67.165.185", + "IPv6": "2c0f:edb0:0:10::b59", + "CanPort80": true + }, + { + "Name": "15d", + "RegionID": 15, + "HostName": "derp15d.tailscale.com", + "IPv4": "102.67.165.36", + "IPv6": "2c0f:edb0:0:10::599", + "CanPort80": true + } + ] + }, + "16": { + "RegionID": 16, + "RegionCode": "mia", + "RegionName": "Miami", + "Latitude": 25.78, + "Longitude": -80.21, + "Nodes": [ + { + "Name": "16b", + "RegionID": 16, + "HostName": "derp16b.tailscale.com", + "IPv4": "192.73.243.135", + "IPv6": "2607:f740:17::476", + "CanPort80": true + }, + { + "Name": "16c", + "RegionID": 16, + "HostName": "derp16c.tailscale.com", + "IPv4": "192.73.243.229", + "IPv6": "2607:f740:17::4e4", + "CanPort80": true + }, + { + "Name": "16d", + "RegionID": 16, + "HostName": "derp16d.tailscale.com", + "IPv4": "192.73.243.141", + "IPv6": "2607:f740:17::475", + "CanPort80": true + } + ] + }, + "17": { + "RegionID": 17, + "RegionCode": "lax", + "RegionName": "Los Angeles", + "Latitude": 34.05, + "Longitude": -118.25, + "Nodes": [ + { + "Name": "17b", + "RegionID": 17, + "HostName": "derp17b.tailscale.com", + "IPv4": "192.73.244.245", + "IPv6": "2607:f740:c::646", + "CanPort80": true + }, + { + "Name": "17c", + "RegionID": 17, + "HostName": "derp17c.tailscale.com", + "IPv4": "208.111.40.12", + "IPv6": "2607:f740:c::10", + "CanPort80": true + }, + { + "Name": "17d", + "RegionID": 17, + "HostName": "derp17d.tailscale.com", + "IPv4": "208.111.40.216", + "IPv6": "2607:f740:c::e1b", + "CanPort80": true + } + ] + }, + "18": { + "RegionID": 18, + "RegionCode": "par", + "RegionName": "Paris", + "Latitude": 48.856667, + "Longitude": 2.352222, + "Nodes": [ + { + "Name": "18b", + "RegionID": 18, + "HostName": "derp18b.tailscale.com", + "IPv4": "176.58.90.147", + "IPv6": "2a00:dd80:3e::363", + "CanPort80": true + }, + { + "Name": "18c", + "RegionID": 18, + "HostName": "derp18c.tailscale.com", + "IPv4": "176.58.90.207", + "IPv6": "2a00:dd80:3e::c19", + "CanPort80": true + }, + { + "Name": "18d", + "RegionID": 18, + "HostName": "derp18d.tailscale.com", + "IPv4": "176.58.90.104", + "IPv6": "2a00:dd80:3e::f2e", + "CanPort80": true + } + ] + }, + "19": { + "RegionID": 19, + "RegionCode": "mad", + "RegionName": "Madrid", + "Latitude": 40.416944, + "Longitude": -3.703333, + "Nodes": [ + { + "Name": "19b", + "RegionID": 19, + "HostName": "derp19b.tailscale.com", + "IPv4": "45.159.97.144", + "IPv6": "2a00:dd80:14:10::335", + "CanPort80": true + }, + { + "Name": "19c", + "RegionID": 19, + "HostName": "derp19c.tailscale.com", + "IPv4": "45.159.97.61", + "IPv6": "2a00:dd80:14:10::20", + "CanPort80": true + }, + { + "Name": "19d", + "RegionID": 19, + "HostName": "derp19d.tailscale.com", + "IPv4": "45.159.97.233", + "IPv6": "2a00:dd80:14:10::34a", + "CanPort80": true + } + ] + }, + "2": { + "RegionID": 2, + "RegionCode": "sfo", + "RegionName": "San Francisco", + "Latitude": 37.7775, + "Longitude": -122.416389, + "Nodes": [ + { + "Name": "2d", + "RegionID": 2, + "HostName": "derp2d.tailscale.com", + "IPv4": "192.73.252.65", + "IPv6": "2607:f740:0:3f::287", + "CanPort80": true + }, + { + "Name": "2e", + "RegionID": 2, + "HostName": "derp2e.tailscale.com", + "IPv4": "192.73.252.134", + "IPv6": "2607:f740:0:3f::44c", + "CanPort80": true + }, + { + "Name": "2f", + "RegionID": 2, + "HostName": "derp2f.tailscale.com", + "IPv4": "208.111.34.178", + "IPv6": "2607:f740:0:3f::f4", + "CanPort80": true + } + ] + }, + "20": { + "RegionID": 20, + "RegionCode": "hkg", + "RegionName": "Hong Kong", + "Latitude": 22.3193, + "Longitude": 114.1694, + "Nodes": [ + { + "Name": "20b", + "RegionID": 20, + "HostName": "derp20b.tailscale.com", + "IPv4": "103.6.84.152", + "IPv6": "2403:2500:8000:1::ef6", + "CanPort80": true + }, + { + "Name": "20c", + "RegionID": 20, + "HostName": "derp20c.tailscale.com", + "IPv4": "205.147.105.30", + "IPv6": "2403:2500:8000:1::5fb", + "CanPort80": true + }, + { + "Name": "20d", + "RegionID": 20, + "HostName": "derp20d.tailscale.com", + "IPv4": "205.147.105.78", + "IPv6": "2403:2500:8000:1::e9a", + "CanPort80": true + } + ] + }, + "21": { + "RegionID": 21, + "RegionCode": "tor", + "RegionName": "Toronto", + "Latitude": 43.741667, + "Longitude": -79.373333, + "Nodes": [ + { + "Name": "21b", + "RegionID": 21, + "HostName": "derp21b.tailscale.com", + "IPv4": "162.248.221.199", + "IPv6": "2607:f740:50::1d1", + "CanPort80": true + }, + { + "Name": "21c", + "RegionID": 21, + "HostName": "derp21c.tailscale.com", + "IPv4": "162.248.221.215", + "IPv6": "2607:f740:50::f10", + "CanPort80": true + }, + { + "Name": "21d", + "RegionID": 21, + "HostName": "derp21d.tailscale.com", + "IPv4": "162.248.221.248", + "IPv6": "2607:f740:50::ca4", + "CanPort80": true + } + ] + }, + "22": { + "RegionID": 22, + "RegionCode": "waw", + "RegionName": "Warsaw", + "Latitude": 52.23, + "Longitude": 21.011111, + "Nodes": [ + { + "Name": "22b", + "RegionID": 22, + "HostName": "derp22b.tailscale.com", + "IPv4": "45.159.98.196", + "IPv6": "2a00:dd80:40:100::316", + "CanPort80": true + }, + { + "Name": "22c", + "RegionID": 22, + "HostName": "derp22c.tailscale.com", + "IPv4": "45.159.98.253", + "IPv6": "2a00:dd80:40:100::3f", + "CanPort80": true + }, + { + "Name": "22d", + "RegionID": 22, + "HostName": "derp22d.tailscale.com", + "IPv4": "45.159.98.145", + "IPv6": "2a00:dd80:40:100::211", + "CanPort80": true + } + ] + }, + "23": { + "RegionID": 23, + "RegionCode": "dbi", + "RegionName": "Dubai", + "Latitude": 25.263056, + "Longitude": 55.297222, + "Nodes": [ + { + "Name": "23b", + "RegionID": 23, + "HostName": "derp23b.tailscale.com", + "IPv4": "185.34.3.232", + "IPv6": "2a00:dd80:3f:100::76f", + "CanPort80": true + }, + { + "Name": "23c", + "RegionID": 23, + "HostName": "derp23c.tailscale.com", + "IPv4": "185.34.3.207", + "IPv6": "2a00:dd80:3f:100::a50", + "CanPort80": true + }, + { + "Name": "23d", + "RegionID": 23, + "HostName": "derp23d.tailscale.com", + "IPv4": "185.34.3.75", + "IPv6": "2a00:dd80:3f:100::97e", + "CanPort80": true + } + ] + }, + "24": { + "RegionID": 24, + "RegionCode": "hnl", + "RegionName": "Honolulu", + "Latitude": 21.306944, + "Longitude": -157.858333, + "Nodes": [ + { + "Name": "24b", + "RegionID": 24, + "HostName": "derp24b.tailscale.com", + "IPv4": "208.83.234.151", + "IPv6": "2001:19f0:c000:c586:5400:04ff:fe26:2ba6", + "CanPort80": true + }, + { + "Name": "24c", + "RegionID": 24, + "HostName": "derp24c.tailscale.com", + "IPv4": "208.83.233.233", + "IPv6": "2001:19f0:c000:c591:5400:04ff:fe26:2c5f", + "CanPort80": true + }, + { + "Name": "24d", + "RegionID": 24, + "HostName": "derp24d.tailscale.com", + "IPv4": "208.72.155.133", + "IPv6": "2001:19f0:c000:c564:5400:04ff:fe26:2ba8", + "CanPort80": true + } + ] + }, + "25": { + "RegionID": 25, + "RegionCode": "nai", + "RegionName": "Nairobi", + "Latitude": -1.286389, + "Longitude": 36.817222, + "Nodes": [ + { + "Name": "25b", + "RegionID": 25, + "HostName": "derp25b.tailscale.com", + "IPv4": "102.67.167.245", + "IPv6": "2c0f:edb0:2000:1::2e9", + "CanPort80": true + }, + { + "Name": "25c", + "RegionID": 25, + "HostName": "derp25c.tailscale.com", + "IPv4": "102.67.167.37", + "IPv6": "2c0f:edb0:2000:1::2c7", + "CanPort80": true + }, + { + "Name": "25d", + "RegionID": 25, + "HostName": "derp25d.tailscale.com", + "IPv4": "102.67.167.188", + "IPv6": "2c0f:edb0:2000:1::188", + "CanPort80": true + } + ] + }, + "26": { + "RegionID": 26, + "RegionCode": "nue", + "RegionName": "Nuremberg", + "Latitude": 49.453889, + "Longitude": 11.0775, + "Nodes": [ + { + "Name": "26b", + "RegionID": 26, + "HostName": "derp26b.tailscale.com", + "IPv4": "167.235.72.200", + "IPv6": "2a01:4f8:1c1c:47b6::1", + "CanPort80": true + }, + { + "Name": "26c", + "RegionID": 26, + "HostName": "derp26c.tailscale.com", + "IPv4": "49.12.193.137", + "IPv6": "2a01:4f8:1c1c:5c70::1", + "CanPort80": true + }, + { + "Name": "26d", + "RegionID": 26, + "HostName": "derp26d.tailscale.com", + "IPv4": "49.13.204.141", + "IPv6": "2a01:4f8:1c0c:7d06::1", + "CanPort80": true + } + ] + }, + "27": { + "RegionID": 27, + "RegionCode": "iad", + "RegionName": "Ashburn", + "Latitude": 39.03, + "Longitude": -77.471111, + "Nodes": [ + { + "Name": "27b", + "RegionID": 27, + "HostName": "derp27b.tailscale.com", + "IPv4": "5.161.218.233", + "IPv6": "2a01:4ff:f0:3db9::1", + "CanPort80": true + }, + { + "Name": "27c", + "RegionID": 27, + "HostName": "derp27c.tailscale.com", + "IPv4": "178.156.152.91", + "IPv6": "2a01:4ff:f0:3913::1", + "CanPort80": true + }, + { + "Name": "27d", + "RegionID": 27, + "HostName": "derp27d.tailscale.com", + "IPv4": "178.156.152.106", + "IPv6": "2a01:4ff:f0:3c8e::1", + "CanPort80": true + }, + { + "Name": "27e", + "RegionID": 27, + "HostName": "derp27e.tailscale.com", + "IPv4": "178.156.134.232", + "IPv6": "2a01:4ff:f0:28d4::1", + "CanPort80": true + } + ] + }, + "28": { + "RegionID": 28, + "RegionCode": "hel", + "RegionName": "Helsinki", + "Latitude": 60.170833, + "Longitude": 24.9375, + "Nodes": [ + { + "Name": "28b", + "RegionID": 28, + "HostName": "derp28b.tailscale.com", + "IPv4": "65.109.143.62", + "IPv6": "2a01:4f9:c012:d55c::1", + "CanPort80": true + }, + { + "Name": "28c", + "RegionID": 28, + "HostName": "derp28c.tailscale.com", + "IPv4": "95.217.2.165", + "IPv6": "2a01:4f9:c012:cd74::1", + "CanPort80": true + }, + { + "Name": "28d", + "RegionID": 28, + "HostName": "derp28d.tailscale.com", + "IPv4": "157.180.28.32", + "IPv6": "2a01:4f9:c012:2e5b::1", + "CanPort80": true + } + ] + }, + "3": { + "RegionID": 3, + "RegionCode": "sin", + "RegionName": "Singapore", + "Latitude": 1.3521, + "Longitude": 103.8198, + "Nodes": [ + { + "Name": "3b", + "RegionID": 3, + "HostName": "derp3b.tailscale.com", + "IPv4": "43.245.49.105", + "IPv6": "2403:2500:300::b0c", + "CanPort80": true + }, + { + "Name": "3c", + "RegionID": 3, + "HostName": "derp3c.tailscale.com", + "IPv4": "43.245.49.83", + "IPv6": "2403:2500:300::57a", + "CanPort80": true + }, + { + "Name": "3d", + "RegionID": 3, + "HostName": "derp3d.tailscale.com", + "IPv4": "43.245.49.144", + "IPv6": "2403:2500:300::df9", + "CanPort80": true + } + ] + }, + "4": { + "RegionID": 4, + "RegionCode": "fra", + "RegionName": "Frankfurt", + "Latitude": 50.1109, + "Longitude": 8.6821, + "Nodes": [ + { + "Name": "4f", + "RegionID": 4, + "HostName": "derp4f.tailscale.com", + "IPv4": "185.40.234.219", + "IPv6": "2a00:dd80:20::a25", + "CanPort80": true + }, + { + "Name": "4g", + "RegionID": 4, + "HostName": "derp4g.tailscale.com", + "IPv4": "185.40.234.113", + "IPv6": "2a00:dd80:20::8f", + "CanPort80": true + }, + { + "Name": "4h", + "RegionID": 4, + "HostName": "derp4h.tailscale.com", + "IPv4": "185.40.234.77", + "IPv6": "2a00:dd80:20::bcf", + "CanPort80": true + }, + { + "Name": "4i", + "RegionID": 4, + "HostName": "derp4i.tailscale.com", + "IPv4": "185.40.234.53", + "IPv6": "2a00:dd80:20::8a6", + "CanPort80": true + } + ] + }, + "5": { + "RegionID": 5, + "RegionCode": "syd", + "RegionName": "Sydney", + "Latitude": -33.867778, + "Longitude": 151.21, + "Nodes": [ + { + "Name": "5b", + "RegionID": 5, + "HostName": "derp5b.tailscale.com", + "IPv4": "43.245.48.220", + "IPv6": "2403:2500:9000:1::ce7", + "CanPort80": true + }, + { + "Name": "5c", + "RegionID": 5, + "HostName": "derp5c.tailscale.com", + "IPv4": "43.245.48.50", + "IPv6": "2403:2500:9000:1::f57", + "CanPort80": true + }, + { + "Name": "5d", + "RegionID": 5, + "HostName": "derp5d.tailscale.com", + "IPv4": "43.245.48.250", + "IPv6": "2403:2500:9000:1::43", + "CanPort80": true + } + ] + }, + "6": { + "RegionID": 6, + "RegionCode": "blr", + "RegionName": "Bangalore", + "Latitude": 12.9716, + "Longitude": 77.5946, + "Nodes": [ + { + "Name": "6a", + "RegionID": 6, + "HostName": "derp6.tailscale.com", + "IPv4": "68.183.90.120", + "IPv6": "2400:6180:100:d0::982:d001", + "CanPort80": true + } + ] + }, + "7": { + "RegionID": 7, + "RegionCode": "tok", + "RegionName": "Tokyo", + "Latitude": 35.6764, + "Longitude": 139.65, + "Nodes": [ + { + "Name": "7b", + "RegionID": 7, + "HostName": "derp7b.tailscale.com", + "IPv4": "103.84.155.178", + "IPv6": "2403:2500:400:20::b79", + "CanPort80": true + }, + { + "Name": "7c", + "RegionID": 7, + "HostName": "derp7c.tailscale.com", + "IPv4": "103.84.155.188", + "IPv6": "2403:2500:400:20::835", + "CanPort80": true + }, + { + "Name": "7d", + "RegionID": 7, + "HostName": "derp7d.tailscale.com", + "IPv4": "103.84.155.46", + "IPv6": "2403:2500:400:20::cfe", + "CanPort80": true + } + ] + }, + "8": { + "RegionID": 8, + "RegionCode": "lhr", + "RegionName": "London", + "Latitude": 51.5072, + "Longitude": 0.1276, + "Nodes": [ + { + "Name": "8e", + "RegionID": 8, + "HostName": "derp8e.tailscale.com", + "IPv4": "176.58.92.144", + "IPv6": "2a00:dd80:3a::b33", + "CanPort80": true + }, + { + "Name": "8f", + "RegionID": 8, + "HostName": "derp8f.tailscale.com", + "IPv4": "176.58.88.183", + "IPv6": "2a00:dd80:3a::dfa", + "CanPort80": true + }, + { + "Name": "8g", + "RegionID": 8, + "HostName": "derp8g.tailscale.com", + "IPv4": "176.58.92.254", + "IPv6": "2a00:dd80:3a::ed", + "CanPort80": true + } + ] + }, + "9": { + "RegionID": 9, + "RegionCode": "dfw", + "RegionName": "Dallas", + "Latitude": 32.779167, + "Longitude": -96.808889, + "Nodes": [ + { + "Name": "9d", + "RegionID": 9, + "HostName": "derp9d.tailscale.com", + "IPv4": "209.177.156.94", + "IPv6": "2607:f740:100::c05", + "CanPort80": true + }, + { + "Name": "9e", + "RegionID": 9, + "HostName": "derp9e.tailscale.com", + "IPv4": "192.73.248.83", + "IPv6": "2607:f740:100::359", + "CanPort80": true + }, + { + "Name": "9f", + "RegionID": 9, + "HostName": "derp9f.tailscale.com", + "IPv4": "209.177.156.197", + "IPv6": "2607:f740:100::cad", + "CanPort80": true + } + ] + } + } +} \ No newline at end of file