thắc mắc Tư vấn tự host VPN server trên Proxmox

  • Người tạo chủ đề Người tạo chủ đề plbThinh
  • Ngày bắt đầu Ngày bắt đầu

plbThinh

Senior Member
Cập nhật: sau cả tuần tìm hiểu thì em đang hiểu thế này:
  • Mô hình: user/app từ internet -> domain (từ DuckDNS) -> IP động (DuckDNS tự cập nhật) -> router (mở port 80/443 trỏ về reverse proxy) -> reverse proxy -> internal service (Headscale)
  • Domain: người dùng k cần gõ IP động để truy cập.
  • DNS server: tự động map và cập nhật domain vào IP động, để domain luôn trỏ đúng về nhà.
  • Reverse proxy: thiết lập nghe từ cổng 80/443 trên router, có lưu lượng từ domain nào thì sẽ forward vào ip tĩnh kèm cổng cụ thể trong LAN. Vd: nghe được từ 80/443 có thằng đang muốn vào trang web vpn.example.com , thì sẽ đẩy nó vào 10.0.0.10:10083 (IP tĩnh của Wireguard server)
E vọc NAS và Proxmox hơn năm rồi. VPN đang xài Tailscale, NAS xài TrueNAS. Đợt này muốn nâng cấp self-hosted một số thứ như bên dưới:
  • VPN server có thể truy cập được từ ngoài mạng nội bộ. Tailscale làm rất tốt, nhưng lưu lượng truy cập đi qa server của họ, e không thích.
  • Web cá nhân.
Em có tìm hiểu thì được biết 1 số thông tin thế này:
  • Headscale có thể đóng vai trò là server trung gian thay cho các server của Tailscale để phục vụ nhu cầu tự host.
  • Muốn setup Headscale server thì phải có sub-domain các thứ và DNS server để đảm bảo lưu lượng từ internet có thể đi vào mạng nội bộ.
  • Mà muốn làm được thì phải có reverse proxy để quản lý và DNS server để cập nhật địa chỉ IP động cho sub-domain.
  • Reverse proxy sau còn dùng cho web cá nhân nữa.
Em đang không hiểu lắm cái mô hình lằng nhằng giữa Headscale, DNS server, reverse proxy, sub-domain, IP động... Có khi thông tin mình kiếm được cũng sai nữa.

Có bác nào hiểu rõ được cơ chế hoạt động của bọn này không nhỉ? Hướng dẫn em với ạ. Em có tìm hiểu thêm về Wireguard, nhưng có vẻ như nếu muốn truy cập từ ngoài thì vẫn phải qua reverse proxy như Headscale.

Em cám ơn.
 
Sửa lần cuối:
Headscale đơn giản là giải pháp thay thế control server , thay vì dùng server của Tailscale. Vậy thôi ko liên quan gì đến reserved proxy cả.

Đại khái thì như này:

  • Thuê 1 con vps nhỏ , tầm 1-2 cpu , 1-2 GB memory là ok, giá khoảng 150-200k 1 tháng gì đó , setup headscale trên đấy
  • Mua 1 tên miền , và add public IP của con vps headscale vào DNS record của tên miền bạn mua
  • Phần còn lại thì giống như tailscale thôi , tạo client từ mạng Lan trỏ về con headscale vps
  • Optional - setup dns server lên con vps headscale , dùng nó làm authoritive dns
  • Optional- sau đấy muốn tạo reserved proxy đẻ gán tên miền cho các resource trong mạng , ssl các thứ thì setup res proxy thôi
 
Sửa lần cuối:
Headscale đơn giản là giải pháp thay thế control server , thay vì dùng server của Tailscale. Vậy thôi ko liên quan gì đến reserved proxy cả.

Đại khái thì như này:

  • Thuê 1 con vps nhỏ , tầm 1-2 cpu , 1-2 GB memory là ok, giá khoảng 150-200k 1 tháng gì đó , setup headscale trên đấy
  • Mua 1 tên miền , và add public IP của con vps headscale vào DNS record của tên miền bạn mua
  • Phần còn lại thì giống như tailscale thôi , tạo client từ mạng Lan trỏ về con headscale vps
  • Optional - setup dns server lên con vps headscale , dùng nó làm authoritive dns
  • Optional- sau đấy muốn tạo reserved proxy đẻ gán tên miền cho các resource trong mạng , ssl các thứ thì setup res proxy thôi

Những 150k/tháng ạ? =((=(( con mini PC của e chỉ tốn 50k tiền điện mỗi tháng thôi mà còn làm được cả mớ việc khác...
 
Những 150k/tháng ạ? =((=(( con mini PC của e chỉ tốn 50k tiền điện mỗi tháng thôi mà còn làm được cả mớ việc khác...
ko có vps thì bro chạy headscale ở đâu ? ở mạng nội bộ à ?
Vì cơ bản gán 1 public IP address cho 1 mình mình nó thôi , mà mạng ở nhà thì public IP gán cho router chính rồi còn đâu

Mà cứ xài Tailscale đi đổi headscale làm gì , nếu mạng và nhu cầu đơn giản , hầu như data đi trục tiếp giữa 2 node , ko qua Tailscale server đâu
 
ko có vps thì bro chạy headscale ở đâu ? ở mạng nội bộ à ?
Vì cơ bản gán 1 public IP address cho 1 mình mình nó thôi , mà mạng ở nhà thì public IP gán cho router chính rồi còn đâu
Là sao b nhỉ, về bản chất cái IP gắn cho con router là để nó lái traffic từ LAN <-> WAN và router hoàn toàn có thể kiểm soát mọi thứ thứ IP Port header TTL ...
 
Là sao b nhỉ, về bản chất cái IP gắn cho con router là để nó lái traffic từ LAN <-> WAN và router hoàn toàn có thể kiểm soát mọi thứ thứ IP Port header TTL ...
Mấy fen chưa thử headscale, nên chưa hình dung ra cách nó hoạt động thôi.

Bản chất là peer to peer , nhưng thằng quỷ tailscale nó lái traffic vô node của nó trước, rồi mới tới exitnode. Mà 1 khi như vầy thì speed chậm. Nên mới có cái vụ custom derp. Là 1 node private riêng. Traffic đi từ local ra custom derp rồi exit out.

Youtupe đầy clip của tụi homelab hướng dẫn từ A đến Z luôn mà.
 
nếu mạng không dính CG-NAT và modem có thể mở port thì triển khai wireguard ở local luôn cho nhanh không được sao
DNS thì đăng ký 1 cái miễn phí ở duckdns hoăc thừa tiền thì mua luôn tên miền rồi đẩy sang mấy cái dịch vụ domain hỗ trợ ddns là xong mà.
 
Là sao b nhỉ, về bản chất cái IP gắn cho con router là để nó lái traffic từ LAN <-> WAN và router hoàn toàn có thể kiểm soát mọi thứ thứ IP Port header TTL ...
Là như này , Tailscale nó là 1 dạng mesh network, lý tưởng nhất cứ mỗi 1 subnet bạn cần ít nhất set 1 tailscale client. Trong trường hợp mạng nhà đi
  • Mạng nhà : trường hợp ko có subnet gì thì cần 1 tailscale client trong mạng là đủ, nếu 2 subnet thì mỗi subnet cài 1
  • Để access về mạng Home từ laptop , điện thoại , thì laptop và điện thoại mõi thằng cài 1 client

3 node này ( mạng home, đt , laptop) sau khi đã có thông tin thì đã có thể connect với nhau. Nếu thông tin của 3 node cố định thì 3 node này luôn duy trì dc connection, ko cần thêm gì nữa.

Nhưng vấn đề là thông tinh của 3 node ( tạm gọi là node 1,2,3 đi ) sẽ có lúc thay đổi ( mạng nhà thì public IP sẽ có lúc change) , laptp mang ra đường dùng mạng khác cũng thế , đt cũng thế.

Lúc đó , cần 1 thằng đứng giữa , để update thông tin qua lại cho 3 node duy trì kết nối với nhau, gọi là control plane. Control plane này chính là Tailscale hoặc Headscale

Ví dụ node A muốn connect node B nhưng node B IP ko như cũ , lúc này node A sẽ quay về hỏi control plane để lấy info. Chính vì thế , mà mọi node trong tailescale network của bạn có thể ko cố định, nhưng control plane phải có public IP cố định cho nó.

Mà 99% mạng gia đình chỉ có 1 public IP ( static hoặc dynamic) , và nó gán cho router/firewall chính ròi , đâu còn IP dư cho headscale. Dĩ nhiên mạng công ty có gói nhiều IP thì vô tư nhé , m đang nói về mạng nhà bt.

Bạn có thể hỏi là có thể forward port mà con headscale cần là được mà. Có điều những port headscale là 80, 443 , 8080 , và và port nữa , toàn nhữung port thông dụng nên ko làm vậy dc.

Nên headscale best sẽ đặt ở vps nào đó là vì thế.

Lâu rồi ko dùng tailscale nên ko biét còn gì mới ko , cơ mà về cơ bản là thế, còn mấy thằng râu ria DERP điếc relay các thứ nữa. Chi tiết cách hoạt động của con control plane như nào thì bạn đọc kĩ hơn ở đây Tailscale: How it works (https://tailscale.com/blog/how-tailscale-works)
 
Sửa lần cuối:
E vọc NAS và Proxmox hơn năm rồi. VPN đang xài Tailscale, NAS xài TrueNAS. Đợt này muốn nâng cấp self-hosted một số thứ như bên dưới:
  • VPN server có thể truy cập được từ ngoài mạng nội bộ. Tailscale làm rất tốt, nhưng lưu lượng truy cập đi qa server của họ, e không thích.
  • Web cá nhân.
Em có tìm hiểu thì được biết 1 số thông tin thế này:
  • Headscale có thể đóng vai trò là server trung gian thay cho các server của Tailscale để phục vụ nhu cầu tự host.
  • Muốn setup Headscale server thì phải có sub-domain các thứ và DNS server để đảm bảo lưu lượng từ internet có thể đi vào mạng nội bộ.
  • Mà muốn làm được thì phải có reverse proxy để quản lý và DNS server để cập nhật địa chỉ IP động cho sub-domain.
  • Reverse proxy sau còn dùng cho web cá nhân nữa.
Em đang không hiểu lắm cái mô hình lằng nhằng giữa Headscale, DNS server, reverse proxy, sub-domain, IP động... Có khi thông tin mình kiếm được cũng sai nữa.

Có bác nào hiểu rõ được cơ chế hoạt động của bọn này không nhỉ? Hướng dẫn em với ạ. Em có tìm hiểu thêm về Wireguard, nhưng có vẻ như nếu muốn truy cập từ ngoài thì vẫn phải qua reverse proxy như Headscale.

Em cám ơn.
Host cái derp của tailscale là xong
 
Là như này , Tailscale nó là 1 dạng mesh network, lý tưởng nhất cứ mỗi 1 subnet bạn cần ít nhất set 1 tailscale client. Trong trường hợp mạng nhà đi
  • Mạng nhà : trường hợp ko có subnet gì thì cần 1 tailscale client trong mạng là đủ, nếu 2 subnet thì mỗi subnet cài 1
  • Để access về mạng Home từ laptop , điện thoại , thì laptop và điện thoại mõi thằng cài 1 client

3 node này ( mạng home, đt , laptop) sau khi đã có thông tin thì đã có thể connect với nhau. Nếu thông tin của 3 node cố định thì 3 node này luôn duy trì dc connection, ko cần thêm gì nữa.

Nhưng vấn đề là thông tinh của 3 node ( tạm gọi là node 1,2,3 đi ) sẽ có lúc thay đổi ( mạng nhà thì public IP sẽ có lúc change) , laptp mang ra đường dùng mạng khác cũng thế , đt cũng thế.

Lúc đó , cần 1 thằng đứng giữa , để update thông tin qua lại cho 3 node duy trì kết nối với nhau, gọi là control plane. Control plane này chính là Tailscale hoặc Headscale

Ví dụ node A muốn connect node B nhưng node B IP ko như cũ , lúc này node A sẽ quay về hỏi control plane để lấy info. Chính vì thế , mà mọi node trong tailescale network của bạn có thể ko cố định, nhưng control plane phải có public IP cố định cho nó.

Mà 99% mạng gia đình chỉ có 1 public IP ( static hoặc dynamic) , và nó gán cho router/firewall chính ròi , đâu còn IP dư cho headscale.
Bạn có thể hỏi là có thể forward port mà con headscale cần là được mà. Có điều những port headscale là 80, 443 , 8080 , và và port nữa , toàn nhữung port thông dụng nên ko làm vậy dc.

Nên headscale best sẽ đặt ở vps nào đó là vì thế.

Lâu rồi ko dùng tailscale nên ko biét còn gì mới ko , cơ mà về cơ bản là thế, còn mấy thằng râu ria DERP điếc relay các thứ nữa. Chi tiết cách hoạt động của con control plane như nào thì bạn đọc kĩ hơn ở đây Tailscale: How it works (https://tailscale.com/blog/how-tailscale-works)
NAT port 80 443 là nó chạy rồi gì mà phải 1 đống port thế thím.
 
uh m đa phần 80,443 là chạy rồi , mấy port UDP khác là optional , mà gán 2 port phổ thông 80,443 cho con headscale xogn thì router mạng ơ nhà lấy gì xài nữa bro.
80 443 trên port router chạy cái web admin của nó, với cũng nó là port local đi theo cái IP local của router có expose ra đâu thím. Cái cần ở đây là 443 80 trong bảng NAT mà.
 
80 443 trên port router chạy cái web admin của nó, với cũng nó là port local đi theo cái IP local của router có expose ra đâu thím. Cái cần ở đây là 443 80 trong bảng NAT mà.
vấn đề là port 443 chẳng hạn, nhiều service dùng qua 443 lắm , reverse proxy cũng dùng 443, dns server trong mạng nếu dùng dns over https cũng thế.
 
vấn đề là port 443 chẳng hạn, nhiều service dùng qua 443 lắm , reverse proxy cũng dùng 443, dns server trong mạng nếu dùng dns over https cũng thế.
Reverse Proxy cho nó Reverse tới HeadScale là xong. dns local đã local rồi thì cần gì DoH hoặc nếu muốn thì vẫn setup đc qua Reverse Proxt đó th. Service nếu nó là client thì đâu phải yêu câu nó chạy trên 443 mà là yêu cầu server chạy trên 443 chứ.
 
Mấy fen nghị lực vậy, mình phải xác thực tài khoản để vào comment.

Không rõ hệ thống của bạn thế nào, có bao nhiêu vùng (zone) cần truy cập nhưng của mình thì mình không thích / muốn dùng self hosted cho những dịch vụ quan trọng, ít nhất là VPN hoặc mail.

Nhìn nhanh mục đích của bạn thì bạn có 2 zone chính là người dùng - homelab ở nhà:
  • Người dùng là bạn thì có thể nhún nhảy đâu đó, có lúc ở ngay nhà, có lúc trong quán cafe lại có lúc trong mạng cty hoặc 4G/5G từ điện thoại. Có nghĩa là bạn không / khó có thể control được mạng của người dùng và 99% là nằm trong NAT.
  • Tuy nhiên zone Homelab của bạn mình cho là bạn full control, có thể forward port 41641 của Tailscale route trafic từ người dùng (internet) vào zone Homelab thì chắc chắn traffic là direct, peer-to-peer, không đi qua DERP của Tailscale. Tất nhiên cũng không cần static IP hay DNS ở đoạn này.

Lí do là chỉ cần 1 trong 2 zone có thể trực tiếp expose ra internet thì 2 zone có thể connect trực tiếp với nhau mà không cần đi qua DERP. Ngoài ra, do bạn sẽ có nhiều device trong zone Homelab, bạn nghĩ phải mở nhiều port 41642, 41643? Không cần, bạn chỉ việc setup một VM hoặc device riêng (mình dùng Rasp hoặc mấy con máy nhẹ điện là được) làm subnet router là xong, bạn truy cập tất cả các device bằng internal IP của mạng bạn thôi, tất nhiên là direct thông qua con subnet router kia, không qua DERP.

Bạn có thể verify bằng cách gõ cách lệnh sau:
Mã:
tailscale status

# Từ máy cá nhân / điện thoại
tailscale ping <ip-local-của-truenas>

# Từ TrueNAS
tailscale ping <tên-của-đt-trên-tailscale>

Cả 2 đều sẽ trả về kết quả direct.

Nếu bạn muốn dùng đến custom DERP (trước mình dùng, sau thì thấy subnet router (và expose 41641) là đủ) và Headscale thì kiểu gì cũng tốn tiền mua domain thôi.
  • Custom DERP yêu cầu có domain và valid HTTPS cert nên setup ở subdomain để root domain còn làm việc khác (mặc dù vẫn dùng custom port được)
  • Headscale thì cũng tương tự như trên.

Lí do mình không dùng Headscale là mình có tới tận 4 zone, thêm zone cloud server của mình và của khách hàng nữa. Down con Headscale thì không có con nào làm coordinator nữa, rất nguy hiểm. À nếu Tailscale bị compromise thì các fen vẫn có thể dùng tính năng Tailscale Lock để ngăn chặn device không phải của bạn vào network. Mấy nay có scandal về cái security của Tailscale bên Reddit
Tailscale nó cũng publish nhiều bài viết rất hay về network của nó, các fen có thể xem qua. Nếu cần thì mình vẽ sơ đồ network ra cho do đang ở cty nên lười lắm :D
 
Mấy fen nghị lực vậy, mình phải xác thực tài khoản để vào comment.

Không rõ hệ thống của bạn thế nào, có bao nhiêu vùng (zone) cần truy cập nhưng của mình thì mình không thích / muốn dùng self hosted cho những dịch vụ quan trọng, ít nhất là VPN hoặc mail.
Bác cấu hình kiểu gì vậy cho ít kinh nghiệm được không, em cũng đang cấu hình tailscale từ điện thoại-pc B-pc A, đặt pc B là subnet router rồi, điện thoại direct tới B, A direct tới B nhưng điện thoại với A thì quyết tâm chạy sang hồng kong, bật đi bật lại chục lần thì may ra có 1 lần direct không là cứ HK với SGP
 

Tệp đính kèm

  • 585.jpg
    585.jpg
    79,4 KB · Lượt xem: 38
  • 1.jpg
    1.jpg
    27 KB · Lượt xem: 32
Bác cấu hình kiểu gì vậy cho ít kinh nghiệm được không, em cũng đang cấu hình tailscale từ điện thoại-pc B-pc A, đặt pc B là subnet router rồi, điện thoại direct tới B, A direct tới B nhưng điện thoại với A thì quyết tâm chạy sang hồng kong, bật đi bật lại chục lần thì may ra có 1 lần direct không là cứ HK với SGP
Theo b mô tả thì b đag test, là kết nối trực tiếp từ ĐT -> PC A chứ không thông qua PC B tức không thông qua subnet route. Nên để sử dụng subnet route thì b phải dùng IP local của PC A. Tức sử dụng IP Local define trong subnet route, tailscale sẽ hiểu là đường đi đến PC A sẽ thông qua B, B sẽ foward đến A.
 
E vọc NAS và Proxmox hơn năm rồi. VPN đang xài Tailscale, NAS xài TrueNAS. Đợt này muốn nâng cấp self-hosted một số thứ như bên dưới:
  • VPN server có thể truy cập được từ ngoài mạng nội bộ. Tailscale làm rất tốt, nhưng lưu lượng truy cập đi qa server của họ, e không thích.
  • Web cá nhân.
Em có tìm hiểu thì được biết 1 số thông tin thế này:
  • Headscale có thể đóng vai trò là server trung gian thay cho các server của Tailscale để phục vụ nhu cầu tự host.
  • Muốn setup Headscale server thì phải có sub-domain các thứ và DNS server để đảm bảo lưu lượng từ internet có thể đi vào mạng nội bộ.
  • Mà muốn làm được thì phải có reverse proxy để quản lý và DNS server để cập nhật địa chỉ IP động cho sub-domain.
  • Reverse proxy sau còn dùng cho web cá nhân nữa.
Em đang không hiểu lắm cái mô hình lằng nhằng giữa Headscale, DNS server, reverse proxy, sub-domain, IP động... Có khi thông tin mình kiếm được cũng sai nữa.

Có bác nào hiểu rõ được cơ chế hoạt động của bọn này không nhỉ? Hướng dẫn em với ạ. Em có tìm hiểu thêm về Wireguard, nhưng có vẻ như nếu muốn truy cập từ ngoài thì vẫn phải qua reverse proxy như Headscale.

Em cám ơn.
Tự làm wireguard VPN trên 1 máy ảo của Proxmox đi (Docker hay LXC hay gì thì tuỳ). Open port của nó trên router.
Reverse proxy thì dùng NPM là dễ nhất rồi, web cá nhân thì có nghĩa là có domain rồi đúng không, sử dụng cloudflare hoặc dynu để quản lý DNS và tên miền, nó có tool để update mỗi khi ip thay đổi.

----------------------------
Tailscale/Headscale thì nó có máy chủ trung gian để giúp các máy kết nối với nhau (google trang chủ nó mô tả rất rõ rồi) Trường hợp các máy client bắt tay được với nhau thì chúng sẽ giao tiếp P2P với nhau mà không cần qua máy chủ nữa, nhưng đời không như mơ, với 1 số hệ thống (VD: Cty có firewall hoặc modem không cho phép) thì bắt tay thất bại, chúng phải đi nhờ qua derp. Rảnh thì ngâm cứu làm, nhưng khá mất công đấy. triển khai Wireguard VPN vẫn là đơn giản nhất
 
VPN thì phải tự host một con ở cloud để làm coordinator, thật ra host ở nhà cũng được nhưng dynamic IP kể cả DDNS cũng khó nói lắm. Giải pháp Cloudflare Tunnel (không biết giờ gọi là gì rồi) cũng là một giải pháp tốt nhưng phụ thuộc vào Cloudflare và đi qua server trung gian của nó.

Và mọi người hay nhầm nhưng thật ra Tailscale chỉ cần một máy có thể NAT ra ngoài được là đủ P2P rồi, không cần 2 đầu nhé. Nên ngồi ở cafe, cty thì vẫn direct được về homelab được bình thường.

Test 1. Từ máy cá nhân (trọ, NAT 2 lớp) => Tailscale LXC (ở nhà)
Mã:
❯ tailscale ping xxx-tailscale
pong from xxx-tailscale (100.73.17.53) via 171.246.xxx.xxx:41641 in 10ms
# 171.246.xxx.xxx là IP homelab ở nhà của mình

Test 2. Từ máy cá nhân (trọ, NAT 2 lớp) => Một cái camera IP (ở nhà, cùng địa điểm ở trên)
Mã:
❯ tailscale ping 192.168.111.254
pong from xxx-tailscale (100.73.17.53) via 171.246.xxx.xxx:41641 in 11ms
# 171.246.xxx.xxx là IP homelab ở nhà của mình

Test 3. Từ máy Tailscale LXC (ở nhà) => máy cá nhân (trọ, 2 lớp)
Mã:
root@tailscale:/# tailscale ping xxx-macbook
pong from xxx-macbook (100.73.183.22) via 42.118.xxx.xxx:54003 in 65ms
# 42.118.xxx.xxx là IP trọ của mình

Đều là direct nha :D Còn muốn route hướng ngược lại ví dụ như bài test 2, add cái route vào router là xong :D

Nên có thể vẽ nháp ra những thiết bị mà fen muốn connect rồi dùng subnet router thôi. Ví dụ như ở trên mình có thể kết nối tới bất kì device nào ở nhà của mình mà chỉ cần một subnet router là đủ. Ngoài ra để chắc ăn thì add OmitDefaultRegions vào Tailscale ACL thì các device của bạn sẽ không dùng DERP nữa, Tailscale vẫn giữ nhiệm vụ điều phối thôi.
 
Có tiền mua con router chuyên VPN về làm khỏe hơn. Bèo bèo thì ER605 nhà TP link nhé. Hỗ trợ L2TP, Wireguard, OpenVPN, PPTP. Bạn có khá nhiều lựa chọn để xài nhé.
Nas bản thân nó có VPN server mà. Chỉ cần bật Port forward vài cổng của VPN vào NAS là được. Kết nối vpn bằng chính user của nas là dùng thôi.
 

Thống kê chủ đề

Ngày tạo
plbThinh,
Người trả lời cuối
johndo100,
Trả lời
27
Lượt xem
3.048
Quay lại
Lên đầu trang