Publieke Toegang tot je ServBay Ontwikkelomgeving met FRP (NAT Traversie)
FRP is een krachtige en gebruiksvriendelijke reverse proxy-tool, ideaal voor situaties waarin je lokale ontwikkelservices (zoals websites, API's, databases, enz.) veilig en eenvoudig wilt blootstellen aan het publieke internet. Via zijn client (frpc
) en server (frps
) architectuur maakt FRP efficiënt NAT traversie mogelijk.
Deze handleiding biedt gedetailleerde instructies speciaal voor ServBay-gebruikers op macOS, over het configureren en gebruiken van de FRP-client (frpc
) om veilige tunnels op te zetten. Zo kun je de webservices die draaien in ServBay vanuit het publieke internet bereiken. Dit is essentieel voor bijvoorbeeld remote demo's, collaborative development, het ontvangen van webhooks of externe API-tests.
Technische Uitleg
De kern van FRP is het opzetten van een versleutelde communicatietunnel van je interne machine (waar frpc
draait, oftewel je ServBay-machine) naar een publieke server (waar frps
draait). Wanneer externe gebruikers je service via het internet bezoeken, komt hun verzoek eerst binnen op de publieke frps
-server. frps
stuurt het verzoek via de reeds opgezette tunnel door naar je interne frpc
. Die zet het weer door naar de lokale service die draait op ServBay (zoals jouw website of API). De respons van de service volgt deze route weer terug naar de eindgebruiker.
Deze aanpak omzeilt firewalls en routerbeperkingen van het interne netwerk en maakt het mogelijk interne services extern te delen. FRP ondersteunt diverse protocollen zoals TCP, UDP, HTTP en HTTPS, en biedt zo krachtige remote toegang tot je ServBay-ontwikkelomgeving.
Gebruiksscenario's
Met ServBay in combinatie met FRP kun je eenvoudig inspelen op de volgende ontwikkelbehoeften:
- Remote demo's en samenwerking: Geef direct je lokale ontwikkelde website of app live weer aan teamleden of klanten, zonder direct te deployen naar een remote server.
- Webhook-tests: Ontvang webhook-notificaties van derde partijen (zoals GitHub, Stripe, WeChat Pay) direct op je lokale machine en debug deze ter plekke.
- API-integratietests: Stel lokale backend-API's open voor externe front-end ontwikkelaars of partners om ze samen te testen.
- Mobiele ontwikkeltests: Test direct op mobiele apparaten door je ServBay-websites of apps vanaf je telefoon/tablet te bezoeken.
- Tijdelijk delen: Eenvoudig lokale bestanden of services delen, zonder ingewikkelde setup.
Vereisten
Voordat je FRP configureert, zorg ervoor dat je aan de volgende voorwaarden voldoet:
- ServBay geïnstalleerd en draaiend: Je macOS-machine draait ServBay, en de lokale service (zoals een website) die je wilt delen staat lokaal klaar voor gebruik.
- Beschikbare publieke FRP-server (
frps
): Je hebt een server met een publiek IP-adres, waarop de FRP-server (frps
) draait. Deze handleiding focust met name op de clientkant (frpc
). - Publiek domein (optioneel, aanbevolen bij HTTP/HTTPS): Voor toegang via een domeinnaam moet je een eigen domein hebben én de DNS kunnen aanpassen.
- FRP-client (
frpc
) geïnstalleerd: De FRP-client zit niet standaard in ServBay; je moet deze zelf downloaden en installeren.
Omgeving Voorbereiden & FRP Client Installeren
Doorloop de volgende stappen om de FRP-client (frpc
) te installeren op je macOS-machine:
Download de FRP-client: Ga naar de FRP GitHub Releases pagina en download het nieuwste FRP-pakket voor jouw macOS-architectuur.
- Apple Silicon (M1/M2/M3): download het bestand
frp_*.darwin_arm64.tar.gz
- Intel-architectuur: download het bestand
frp_*.darwin_amd64.tar.gz
- Apple Silicon (M1/M2/M3): download het bestand
Installeer de FRP-client: Pak het gedownloade bestand uit en kopieer het uitvoerbare bestand
frpc
naar een map in je systeem-PATH, bijvoorbeeld/usr/local/bin
. Hierdoor kun jefrpc
vanaf elke terminallocatie uitvoeren.Let op: de versienaam (
0.52.3
als voorbeeld) en de architectuur (darwin_arm64
) kunnen afwijken. Pas ze aan op de naam van jouw downloadbestand.bash# Stel, het gedownloade bestand heet frp_0.52.3_darwin_arm64.tar.gz # Ga naar de downloadmap cd ~/Downloads # Pak het bestand uit (pas de bestandsnaam aan indien nodig) tar -zxvf frp_0.52.3_darwin_arm64.tar.gz # Ga naar de uitgepakte map cd frp_0.52.3_darwin_arm64 # Kopieer het frpc-bestand naar /usr/local/bin sudo cp frpc /usr/local/bin/ # (optioneel) Kopieer ook het voorbeeldbestand frpc.toml naar je thuismap # cp frpc.toml ~/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Voer je gebruikerswachtwoord in om het
sudo
-commando te voltooien.Installatie controleren: Open een nieuwe terminal en controleer of
frpc
correct geïnstalleerd is en aanwezig is in je PATH:bashfrpc -v # Verwachte output: frpc version 0.52.3
1
2Zie je de versiedetails, dan is de installatie geslaagd.
Configuratie van de FRP Client Tunnel
De FRP-client wordt geconfigureerd via een bestand genaamd frpc.toml
(het gebruik van TOML-formaat wordt in de nieuwste FRP-versies aanbevolen). Hierin geef je aan hoe frpc
verbinding maakt met de FRP-server (frps
) en hoe ServBay's services op het publieke internet beschikbaar worden gemaakt.
Uitleg van het frpc.toml
Configuratiebestand
Dit is een basisopzet van een frpc.toml
-bestand, waarin verbindingsinfo en een eenvoudige proxy worden beschreven:
toml
# frpc.toml - Voorbeeld FRP clientconfiguratie
# [common] gedeelte: client-server verbinding
serverAddr = "your-frps-server.com" # Publiek IP-adres of domein van je FRP-server
serverPort = 7000 # Poort op de FRP-server voor clientverbindingen (standaard 7000)
# Authenticatie (aanbevolen: token)
auth.method = "token"
auth.token = "your_authentication_token" # Zelfde authenticatietoken als op je FRP-server
# Optioneel: TLS-encryptie tussen client en server activeren
# tls_enable = true
# [[proxies]]: definieer één of meerdere tunnelingproxy-configuraties
[[proxies]]
name = "my-web-service" # Unieke naam in dit frpc.toml-bestand
type = "http" # Type proxy: http, https, tcp, udp, stcp, xtcp, enz.
localIP = "127.0.0.1" # IP van de lokale service, normaal 127.0.0.1
localPort = 80 # Poort waarop de lokale service draait (bijvoorbeeld standaard HTTP op ServBay)
customDomains = ["servbay.your-domain.com"] # Extern toegankelijke domeinnaam (alleen bij http/https). **Moet via DNS verwijzen naar het publieke IP-adres van de FRP-server.**
# Meerdere proxy's toevoegen? Kopieer het [[proxies]] segment.
# [[proxies]]
# ... (configuratie voor een andere service)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Instelling | Gedeelte | Beschrijving |
---|---|---|
serverAddr | [common] | Publiek IP-adres of domein van de FRP-server (frps ). |
serverPort | [common] | Poort voor clientverbindingen op de FRP-server, standaard 7000 . Pas aan op basis van je serverinstellingen. |
auth.method | [common] | Authenticatiemethode tussen client en server, meestal token . Moet overeenkomen met serverconfiguratie. |
auth.token | auth (onder [common] ) | Het authentificatietoken; houd deze geheim. |
tls_enable | [common] | Activeren van TLS-encryptie tussen client en server. Aanbevolen: true voor extra beveiliging. |
[[proxies]] | rootlevel | Array van te configureren proxy-tunnels. Elk [[proxies]] -blok is een afzonderlijke mapping. |
name | [[proxies]] | Unieke naam voor deze proxy-tunnel, bij voorkeur herkenbaar aan de service. |
type | [[proxies]] | Type proxy-protocol. Bijv. http , https , tcp , udp . Kies wat bij je lokale service past. |
localIP | [[proxies]] | Adres van de interne service, meestal 127.0.0.1 . Uitzonderingen daargelaten zo laten. |
localPort | [[proxies]] | Luisterpoort van de lokale service. Voor ServBay is dit doorgaans 80 (HTTP), 443 (HTTPS), en bijv. 3306 voor MySQL of 5432 voor PostgreSQL. |
remotePort | [[proxies]] | (Alleen voor tcp /udp ) De poort op de server die publiek beschikbaar wordt. Externe gebruikers bereiken je service via serverAddr:remotePort . |
customDomains | [[proxies]] | (Alleen bij http /https ) Domeinnaam waarmee de service extern benaderd wordt. Is array; je kunt meerdere domeinnamen opgeven. Allen moeten via DNS uitkomen op je publieke FRP-server. |
subdomain | [[proxies]] | (Alleen bij http /https , server must support) Definieer hier een subdomein als de FRP-server dat toestaat via zijn subdomain_host -instelling. Alternatief voor customDomains . |
[proxies.plugin] | [[proxies]] | Plugins zoals https2https voor het verwerken van lokale HTTPS-services. |
hostHeaderRewrite | [proxies.plugin] of [[proxies]] | Pas de Host header aan naar de interne domeinnaam — belangrijk voor ServBay's virtual host mapping. Kies hier de ServBay-domeinnaam die je als host gebruikt! |
Voorbeeld: ServBay HTTPS Service Publiek Toegankelijk Maken
Standaard gebruikt ServBay HTTPS en beheert automatisch de SSL-certificaten. Om een lokale ServBay HTTPS-website via FRP extern te delen, gebruik je meestal het https
proxietype en eventueel de https2https
plugin. Aangezien ServBay virtuele hosts op de Host
header baseert, is het gebruik van hostHeaderRewrite
gebruikelijk.
Onderstaand een voorbeeld waarbij een lokale ServBay-website (met als domein servbay.test
) wordt gedeeld via een extern domein (test-frp.servbay.app
). Zorg dat je publieke domein (zoals test-frp.servbay.app
) via DNS correct verwijst naar de publieke IP van je FRP-server (frps.servbay.demo
).
Maak een bestand frpc.toml
aan (bijvoorbeeld in je thuismap ~/frpc.toml
) en voeg het volgende toe:
toml
# Voorbeeld frpc.toml - Mapping van een ServBay HTTPS-website
# [common]: FRP-serververbinding
serverAddr = "frps.servbay.demo" # Jouw FRP-server (vervang door eigen serveradres)
serverPort = 7000 # Serverpoort (pas aan indien nodig)
auth.method = "token"
auth.token = "servbay_demo_token" # Vervang door het token van je eigen FRP-server
# Aanbevolen: gebruik TLS
tls_enable = true
# [[proxies]]: publiceer lokale ServBay HTTPS-website
[[proxies]]
name = "servbay-website-https" # Vrij te kiezen naam, zoals servbay-test-site
type = "https" # Proxytype is HTTPS
# Publiek domein; moet correct naar je FRP-server wijzen (via DNS)
customDomains = ["test-frp.servbay.app"] # Vervang dit door je eigen domein
# Mapping details naar lokale ServBay service
localIP = "127.0.0.1" # Meestal luistert ServBay op localhost
localPort = 443 # Standaardpoort HTTPS
# Belangrijk: pas Host-header aan naar de lokale ServBay-domeinnaam
hostHeaderRewrite = "servbay.test" # Zet hier de domeinnaam die je lokaal in ServBay hebt geconfigureerd
# Optioneel: stel custom headers in om de oorsprong voor de backend herkenbaar te maken
[proxies.requestHeaders.set]
x-from-where = "frp-tunnel"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Vervang de waarden voor serverAddr
, serverPort
, auth.token
, customDomains
en hostHeaderRewrite
door jouw eigen informatie.
Waarom hostHeaderRewrite
essentieel is:
ServBay gebruikt een webserver zoals Nginx of Caddy voor het beheren van lokale sites. Die servers bepalen aan de hand van de Host
header welke site of app moet worden bediend. Zonder hostHeaderRewrite
stuurt je tunnelverkeer nog de publieke domeinnaam (test-frp.servbay.app
) als host mee, waardoor ServBay vaak niet de juiste site kan aanwijzen (en bijvoorbeeld een 404 geeft). Het overschrijven van de Host
-header naar je lokale ServBay-domeinnaam zorgt dat het juist aankomt.
FRP Client Starten
Sla je frpc.toml
-bestand op. Open de terminal en ga (indien nodig) naar de map waar het bestand staat. Je kunt ook altijd het volledige pad aangeven in de opdracht. Start dan de FRP-client zo:
bash
# Als frpc.toml in de huidige map staat
frpc -c frpc.toml
# Of als het bestand in je thuismap staat:
# frpc -c ~/frpc.toml
1
2
3
4
5
2
3
4
5
Dit draait frpc
in de voorgrond en verbindt hem met de opgegeven frps
-server. Zie je in de terminal loguitvoer en worden de tunnels gestart? Dan werkt de setup.
Wil je frpc
op de achtergrond draaien, gebruik dan nohup
of tools als launchctl
van macOS. Bijvoorbeeld met nohup
:
bash
# Bij een frpc.toml in je thuismap
nohup frpc -c ~/frpc.toml &
1
2
2
nohup
stuurt uit naar nohup.out
en draait de process in de achtergrond. Met macOS' launchctl
kun je het strakker beheren, maar dat valt buiten deze handleiding.
Service Controleren & Log Diagnostiek
Service Testen
Controleer na het starten van frpc
dat je logs laten zien dat de verbinding succesvol is. Open in de browser het publieke domein dat je in frpc.toml
hebt ingesteld, bijv. https://test-frp.servbay.app
. Controleer:
- Laadt de pagina zonder verbindings- of certificaatfouten (bij HTTPS)?
- Ontvang je HTTP 200 of een andere verwachte status?
- Komt de inhoud overeen met lokaal bezoek aan
https://servbay.test
? - Toont de browser bij HTTPS een slotje en geldt het certificaat voor jouw domein?
Log Diagnostiek
De logbestanden van de FRP-client zijn cruciaal bij troubleshooten. Standaard komen de logs bij starten van frpc -c frpc.toml
in de terminal. Zie je hier fouten of waarschuwingen, onderzoek deze dan.
Voor extra debuginfo, start je frpc
met een debug-loglevel:
bash
frpc -c frpc.toml --log_level debug
1
Gedefinieerd logbestand (log_file = "/var/log/frpc.log"
) in je toml? Dan kun je live meekijken met:
bash
tail -f /pad/naar/jouw/frpc.log
1
Veelvoorkomende Problemen & Oplossingen
Kom je problemen tegen bij het instellen of gebruiken van FRP? Check dan onderstaande tabel voor oplossingen:
Probleem | Oplossing |
---|---|
Verbindingsfout door foutieve authenticatie | Controleer of auth.token en auth.method onder [common] in frpc.toml exact overeenkomen met de server. Check ook de logging van de server (frps ) op authenticatiefouten. |
Publiek domein is niet bereikbaar of verkeerd geconfigureerd | Zorg dat de namen onder customDomains zijn ingesteld in DNS (CNAME of A record) naar het publieke IP van je FRP-server. Verifieer met ping your-frp-domain.com of een online DNS-tool, en wacht op DNS-propagatie. |
Toegang tot publiek domein geeft een FRP welkomstpagina | DNS is juist, maar de FRP-server stuurt het domein niet door. Controleer of customDomains overeenkomt met het bezochte domein en of de proxytype http of https is. Check ook of de server dit domein toestaat. |
Lokale poort is bezet of service draait niet | Zorg dat ServBay draait en dat jouw lokale service luistert op de opgegeven poort (localPort ). Gebruik bijvoorbeeld lsof -i :PORT om te checken wie/waarop wordt geluisterd. |
Tunnel is instabiel of verbreekt vaak | Controleer de netwerkstabiliteit van de lokale machine en je FRP-server. Je kunt in [common] de heartbeat verhogen (heartbeat_timeout = 30 ) of het aantal verbindingen verhogen met pool_count . |
HTTP-dienst wordt altijd doorgestuurd naar HTTPS | Controleer of ServBay (bv. Nginx/Caddy) HTTP naar HTTPS forceert. Wil je HTTP delen? Stel type dan in op http en verwijder onnodige plug-ins. Wil je HTTPS delen, gebruik dan https en controleer (plugin)certificaten. |
Browsers geven HTTPS-certificaatfouten | Lokaal draait ServBay mogelijk op een self-signed of eigen CA-certificaat; browsers geven dan een waarschuwing. Installeer het ServBay User CA-certificaat lokaal of laat FRP het oorspronkelijke certificaat verwerken via plug-in, of gebruik op de FRP-server een geldig certificaat. Let op: met https + hostHeaderRewrite handelt ServBay SSL af; browserwaarschuwingen hangen af van of het lokale ServBay-certificaat wordt vertrouwd. |
Je krijgt een 404 bij toegang | Controleer of hostHeaderRewrite in frpc.toml overeenkomt met de lokale ServBay-domeinnaam (bv. servbay.test ). Host-header mismatch zorgt dat ServBay niet de juiste virtual host vindt. |
Poorten op de FRP-server worden door firewall geblokkeerd | Open op je FRP-server de poorten voor serververbinding (serverPort , vaak 7000) en de eventuele servicepoorten (HTTP 80, HTTPS 443, of expliciet ingestelde TCP/UDP-poorten). |
Lokale firewall blokkeert verbindingen | Controleer dat er geen macOS-firewallregels outbound verbindingen op serverPort blokkeren, en dat ServBay-luisterpoorten (localPort ) verbindingen accepteren van localhost. |
FRP-client zegt verbonden maar service is niet bereikbaar | Vaak een probleem aan de serverside: check FRP-serverlogs, poortforwarding of domeinmapping. Controleer of de juiste regels zijn ingesteld en logs geen errors geven. |
Voordelen & Veiligheidsadviezen van FRP binnen ServBay
Het combineren van FRP met ServBay biedt veel flexibiliteit en gemak voor ontwikkelaars:
- Meerdere protocollen: FRP ondersteunt HTTP, HTTPS, TCP, UDP, enz. Deel niet alleen webservices, maar bijvoorbeeld ook databases, Redis of zelfs SSH via ServBay.
- Flexibele configuratie: Via een eenvoudig TOML-bestand maak je meerdere tunnelproxy's, en deel je verschillende ServBay-websites of -services tegelijk met de buitenwereld.
- Open source en controle: FRP is open source en volledig zelf te beheren — je bent niet afhankelijk van externen of commerciële aanbieders.
- Beveiliging: Ondersteunt authenticatie tokens, TLS-encryptie (
tls_enable = true
), en met de SSL-certificaatbeheer van ServBay verhoog je de veiligheid van je complete ontwikkelomgeving.
Beveiligingstips:
- Gebruik TLS-encryptie: Zet in
[common]
van jefrpc.toml
tls_enable = true
voor veilige communicatie tussen client en server. - Sterke tokens: Gebruik voor
auth.token
een complex, moeilijk te raden wachtwoord/zin, en ververs deze periodiek. - Beperk openstelling: Deel alleen de services/poorten die daadwerkelijk via internet toegankelijk moeten zijn.
- Gebruik een domein, geen direct IP: Voor HTTP/HTTPS-services is toegang via je domeinnaam via
customDomains
aan te raden, niet via IP:poort (indien mogelijk). - Beveilig je FRP-server: Zorg dat je alleen benodigde poorten openzet op je server en firewallregels instelt.
- Overweeg toegangscontrole: FRP-servers ondersteunen, afhankelijk van configuratie, ook toegang beperken op basis van IP of andere criteria.
Met bovenstaande stappen en adviezen maak je eenvoudig ServBay's lokale ontwikkelservices extern beschikbaar met FRP — en werk je veiliger en flexibeler dan ooit.