{"id":77385,"date":"2020-11-09T09:40:04","date_gmt":"2020-11-09T06:40:04","guid":{"rendered":"https:\/\/computingforgeeks.com\/?p=77385"},"modified":"2023-11-22T15:53:15","modified_gmt":"2023-11-22T12:53:15","slug":"expose-local-server-to-internet-using-frp-proxy","status":"publish","type":"post","link":"https:\/\/computingforgeeks.com\/expose-local-server-to-internet-using-frp-proxy\/","title":{"rendered":"Expose Local Server behind NAT to Internet using FRP Proxy"},"content":{"rendered":"\n<p>It is usually a big challenge for geeks who would love to access their local server over the internet. Don&#8217;t you worry no more, we shall be exploring a tool that can be used to expose your local server and services behind a firewall on NAT over the internet. In this article you&#8217;ll learn to expose a Local Server behind a NAT or firewall to the internet using FRP Proxy.<\/p>\n\n\n\n<p>FRP proxy is a reverse proxy written in Golang that allows you forward a port of your local server behind a firewall or NAT to a public server.<\/p>\n\n\n\n<p>FRP proxy currently supports TCP, UDP, HTTP and HTTPS protocols.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"392\" height=\"394\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2020\/11\/Expose-Local-Server-behind-a-NAT-or-firewall-to-the-internet-using-FRP-Proxy.png\" alt=\"\" class=\"wp-image-77386\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2020\/11\/Expose-Local-Server-behind-a-NAT-or-firewall-to-the-internet-using-FRP-Proxy.png 392w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2020\/11\/Expose-Local-Server-behind-a-NAT-or-firewall-to-the-internet-using-FRP-Proxy-298x300.png 298w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2020\/11\/Expose-Local-Server-behind-a-NAT-or-firewall-to-the-internet-using-FRP-Proxy-150x150.png 150w\" sizes=\"auto, (max-width: 392px) 100vw, 392px\" \/><figcaption class=\"wp-element-caption\">FRP Architecture<\/figcaption><\/figure>\n\n\n\n<p>Let us explore the basic configuration methods for FRP proxy. <\/p>\n\n\n\n<p>Before you can have this setup up and running, you need the following:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A local server that is behind a firewall or NAT, e.g your laptop.<\/li>\n\n\n\n<li>A remote server with a public IP, e.g AWS EC2 instance.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-installation-of-frp-proxy\">Installation of FRP Proxy on Linux \/ macOS \/ FreeBSD<\/h2>\n\n\n\n<p>Let us jump into the installation part. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-step-1-download-and-extract-frp\">1. Download and extract FRP<\/h3>\n\n\n\n<p>Download the latest version of FRP from<a href=\"https:\/\/github.com\/fatedier\/frp\/releases\" target=\"_blank\" rel=\"noreferrer noopener\"> their Github repository<\/a>. This should be downloaded on<strong> both the local <\/strong>and the<strong> public server.<\/strong><\/p>\n\n\n\n<p>Get the latest release Tag:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>TAG=$(curl --silent \"https:\/\/api.github.com\/repos\/fatedier\/frp\/releases\/latest\"|grep '\"tag_name\"'|sed -E 's\/.*\"(&#91;^\"]+)\".*\/\\1\/'|sed 's\/v\/\/')<\/code><\/pre>\n\n\n\n<p>Download and extract the archive.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">### Linux Intel 64-bit ###\n<\/mark><\/em>wget https:\/\/github.com\/fatedier\/frp\/releases\/download\/v${TAG}\/frp_${TAG}_linux_amd64.tar.gz\ntar xvf frp_${TAG}_linux_amd64.tar.gz\ncd  frp_${TAG}_linux_amd64\n\n<em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">### Linux ARM 64-bit ###\n<\/mark><\/em>wget https:\/\/github.com\/fatedier\/frp\/releases\/download\/v${TAG}\/frp_${TAG}_linux_arm64.tar.gz\ntar xvf frp_${TAG}_linux_arm64.tar.gz\ncd frp_${TAG}_linux_arm64\n\n<em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">### macOS Intel 64-bit ###\n<\/mark><\/em>wget https:\/\/github.com\/fatedier\/frp\/releases\/download\/v${TAG}\/frp_${TAG}_darwin_amd64.tar.gz\ntar xvf frp_${TAG}_darwin_amd64.tar.gz\ncd frp_${TAG}_darwin_amd64\n\n<em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">### macOS ARM 64-bit ###\n<\/mark><\/em>wget https:\/\/github.com\/fatedier\/frp\/releases\/download\/v${TAG}\/frp_${TAG}_darwin_arm64.tar.gz\ntar xvf frp_${TAG}_darwin_arm64.tar.gz\ncd frp_${TAG}_darwin_arm64\n\n<em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">### FreeBSD 64-bit ###\n<\/mark><\/em>wget https:\/\/github.com\/fatedier\/frp\/releases\/download\/v${TAG}\/frp_${TAG}_freebsd_amd64.tar.gz\ntar xvf frp_${TAG}_freebsd_amd64.tar.gz\ncd frp_${TAG}_freebsd_amd64<\/code><\/pre>\n\n\n\n<p>The following files are in the extracted directory:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">ls<\/mark>\nfrpc  frpc.toml  frps  frps.toml  LICENSE<\/code><\/pre>\n\n\n\n<p>At the public server, the <code>frps<\/code> and <code>frps.toml<\/code> file are needed. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-step-2-setup-public-server\">2. Setup Public server<\/h3>\n\n\n\n<p>On the public server, we only need to set the <strong>bind_port<\/strong> under the <strong>[common]<\/strong> in the <code>frps.toml<\/code> file to <em>7000<\/em>. This is the default port, you can also define your own port depending on your preference. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">vim frps.toml<\/mark>\nbind_port = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">7000<\/mark><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-step-3-start-frp-on-public-server\">3. Start FRP on public server<\/h3>\n\n\n\n<p>We need to start the service on the public server to allow connections from the local server.<\/p>\n\n\n\n<p>The following command shall be used:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/frps -c .\/frps.toml<\/code><\/pre>\n\n\n\n<p>You should see an output that the service is listening on the specified port:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\"> .\/frps -c .\/frps.toml<\/mark>\n2023\/11\/22 12:11:54 &#91;I] &#91;root.go:102] frps uses config file: .\/frps.toml\n2023\/11\/22 12:11:54 &#91;I] &#91;service.go:200] frps tcp listen on 0.0.0.0:7000\n2023\/11\/22 12:11:54 &#91;I] &#91;root.go:111] frps started successfully<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-step-4-configure-frp-on-local-server\">4. Configure FRP Client on local server<\/h3>\n\n\n\n<p>With FRP up and running on the <strong><em>Public serve<\/em><\/strong>r, the next step is to configure the<strong> local server<\/strong>.<\/p>\n\n\n\n<p>Download and extract the package as covered in previous step.<\/p>\n\n\n\n<p>For example, to <em>expose ssh on our local server<\/em>. The required files on the local server are <code>frpc<\/code> and <code>frpc.toml<\/code>.<\/p>\n\n\n\n<p>Edit the <code>frpc.toml<\/code> file and add the following details:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Put the Public servers IP in the <strong>server_addr<\/strong> value and the port you defined in the Public server under the [common] section. <\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">vim frpc.toml<\/mark>\nserverAddr = \"<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">&lt;PUBLIC_FRP_SERVER_IP&gt;<\/mark>\"\nserverPort = 7000\n\n&#91;&#91;proxies]]\nname = \"ssh\"\ntype = \"tcp\"\nlocalIP = \"127.0.0.1\"\nlocalPort = 22\nremotePort = 6000<\/code><\/pre>\n\n\n\n<p>In the above configuration, we have exposed port 22 of our local server to port 6000 of the public server.<\/p>\n\n\n\n<p>We have also defined the protocol that we&#8217;re using, TCP.<\/p>\n\n\n\n<p>We can also expose a web service running on your local server in the same configuration. You can add the webserver details just below the ssh configuration in the <code>frpc.toml<\/code> file.<\/p>\n\n\n\n<p>In the example below, the webserver is running on port 80 of the local server and will be forwarded to port 8080 of the public server.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;&#91;proxies]]\nname = \"web\"\ntype = \"http\"\nlocalPort = 80\ncustomDomains = &#91;\"www.example.com\"]<\/code><\/pre>\n\n\n\n<p>The following step is to start FRP service on the local server.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/frps -c .\/frps.toml<\/code><\/pre>\n\n\n\n<p>You can now ssh to your local server using the following command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -oPort=6000 <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">&lt;username&gt;<\/mark>@<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">&lt;PUBLIC_FRP_SERVER_IP&gt;<\/mark><\/code><\/pre>\n\n\n\n<p>You can also access the webserver running on the public server&#8217;s port 8080<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http:\/\/<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">&lt;PUBLIC_FRP_SERVER_IP&gt;<\/mark>:8080<\/code><\/pre>\n\n\n\n<p>You should also allow the respective ports on the remote server if you have a firewall configured.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-daemonize-frp-service\">5. Daemonize FRP service using Systemd<\/h3>\n\n\n\n<p>You might want to have FRP services on local and public server running as a service\/daemon.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1) To daemonize frps service on the public server:<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Copy the frps file to \/usr\/bin<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp frps \/usr\/bin<\/code><\/pre>\n\n\n\n<p>2. Copy the <code>frps.service<\/code> file in <code>systemd<\/code> folder to <code>\/etc\/systemd\/system<\/code>. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo tee \/etc\/systemd\/system\/frps.service&lt;&lt;EOF\n&#91;Unit]\nDescription=frp server\nWants=network-online.target\nAfter=network.target network-online.target\n\n&#91;Service]\nExecStart=\/usr\/bin\/frps -c \/etc\/frp\/frps.toml\n\n&#91;Install]\nWantedBy=multi-user.target\nEOF<\/code><\/pre>\n\n\n\n<p>3. Create folder called frp in \/etc\/ directory.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/etc\/frp<\/code><\/pre>\n\n\n\n<p>4. Copy <code>frps.toml<\/code> file to<code> \/etc\/frp<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp frps.toml \/etc\/frp<\/code><\/pre>\n\n\n\n<p>5. Reload daemon<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl daemon-reload<\/code><\/pre>\n\n\n\n<p>6. Start frps service<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl start frps.service<\/code><\/pre>\n\n\n\n<p>Check service status after starting:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\"> systemctl status frps<\/mark>\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-light-green-cyan-color\">\u25cf<\/mark> frps.service - frp client\n     Loaded: loaded (\/etc\/systemd\/system\/frps.service; disabled; preset: disabled)\n    Drop-In: \/usr\/lib\/systemd\/system\/service.d\n             \u2514\u250010-timeout-abort.conf\n     Active: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">active (running)<\/mark> since Wed 2023-11-22 12:26:56 UTC; 4s ago\n   Main PID: 3860 (frps)\n      Tasks: 5 (limit: 4520)\n     Memory: 8.1M\n        CPU: 150ms\n     CGroup: \/system.slice\/frps.service\n             \u2514\u25003860 \/usr\/bin\/frps -c \/etc\/frp\/frps.toml\n\nNov 22 12:26:56 fed39.mylab.io systemd&#91;1]: Started frps.service - frp client.\nNov 22 12:26:56 fed39.mylab.io frps&#91;3860]: 2023\/11\/22 12:26:56 &#91;I] &#91;root.go:102] frps uses config file: \/etc\/frp\/frps.toml\nNov 22 12:26:56 fed39.mylab.io frps&#91;3860]: 2023\/11\/22 12:26:56 &#91;I] &#91;service.go:200] frps tcp listen on 0.0.0.0:7000\nNov 22 12:26:56 fed39.mylab.io frps&#91;3860]: 2023\/11\/22 12:26:56 &#91;I] &#91;root.go:111] frps started successfully<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2) Running frpc service using systemd on local server (client)<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Copy frpc file to \/usr\/bin<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp frpc \/usr\/bin<\/code><\/pre>\n\n\n\n<p>2. Create folder called frp in \/etc\/ directory.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/etc\/frp<\/code><\/pre>\n\n\n\n<p>3. Copy frpc.toml file to \/etc\/frp<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp frpc.toml \/etc\/frp<\/code><\/pre>\n\n\n\n<p>4. Create systemd service<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo tee \/etc\/systemd\/system\/frpc.service&lt;&lt;EOF\n&#91;Unit]\nDescription=frp client\nWants=network-online.target\nAfter=network.target network-online.target\n\n&#91;Service]\nExecStart=\/usr\/bin\/frpc -c \/etc\/frp\/frpc.toml\n\n&#91;Install]\nWantedBy=multi-user.target\nEOF<\/code><\/pre>\n\n\n\n<p>5. Reload daemon<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl daemon-reload<\/code><\/pre>\n\n\n\n<p>6.  Start frpc service<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl start frpc.service<\/code><\/pre>\n\n\n\n<p>Confirm service is in running state:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">systemctl status frpc<\/mark>\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-light-green-cyan-color\">\u25cf<\/mark> frpc.service - frp client\n     Loaded: loaded (\/etc\/systemd\/system\/frpc.service; disabled; preset: disabled)\n    Drop-In: \/usr\/lib\/systemd\/system\/service.d\n             \u2514\u250010-timeout-abort.conf\n     Active: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">active (running)<\/mark> since Wed 2023-11-22 12:30:55 UTC; 7s ago\n   Main PID: 3943 (frpc)\n      Tasks: 4 (limit: 4520)\n     Memory: 1.8M\n        CPU: 17ms\n     CGroup: \/system.slice\/frpc.service\n             \u2514\u25003943 \/usr\/bin\/frpc -c \/etc\/frp\/frpc.toml\n\nNov 22 12:30:55 fed39.mylab.io systemd&#91;1]: Started frpc.service - frp client.\nNov 22 12:30:55 fed39.mylab.io frpc&#91;3943]: 2023\/11\/22 12:30:55 &#91;I] &#91;root.go:139] start frpc service for config file &#91;\/etc\/frp\/frpc.toml]\nNov 22 12:30:55 fed39.mylab.io frpc&#91;3943]: 2023\/11\/22 12:30:55 &#91;I] &#91;service.go:299] &#91;e789d0803f5eef73] login to server success, get run id &#91;e789d0803f5eef73]\nNov 22 12:30:55 fed39.mylab.io frpc&#91;3943]: 2023\/11\/22 12:30:55 &#91;I] &#91;proxy_manager.go:156] &#91;e789d0803f5eef73] proxy added: &#91;test-tcp]\nNov 22 12:30:55 fed39.mylab.io frpc&#91;3943]: 2023\/11\/22 12:30:55 &#91;I] &#91;control.go:173] &#91;e789d0803f5eef73] &#91;test-tcp] start proxy success<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-monitor-fps-using-dashboard\">6. Monitor FPS using Dashboard<\/h3>\n\n\n\n<p>There are two UI interfaces.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Server Admin UI<\/h4>\n\n\n\n<p>FPS has its own dashboard that can be configured to view the stats and metrics.<\/p>\n\n\n\n<p>To activate you need to add the details below in the <code>frps.toml <\/code>file of the Public server.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">sudo vim \/etc\/frp\/frps.toml<\/mark>\nwebServer.addr = \"127.0.0.1\"\nwebServer.port = 7500\n# dashboard's username and password are both optional\nwebServer.user = \"<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">admin<\/mark>\"\nwebServer.password = \"<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">admin<\/mark>\"\n# Enable metrics with Prometheus\nenablePrometheus = true<\/code><\/pre>\n\n\n\n<p>You can specify the username and password to the details of your choice. The address can be set to Server IP for external access.<\/p>\n\n\n\n<p>Setting <code>webServer.addr = \"0.0.0.0\"<\/code> means listen on all interfaces.<\/p>\n\n\n\n<p>Additionally, you can use HTTPS port by using your domains wildcard or normal SSL certificate:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>webServer.port = 7500\n# dashboard's username and password are both optional\nwebServer.user = \"admin\"\nwebServer.password = \"admin\"\nwebServer.tls.certFile = \"server.crt\"\nwebServer.tls.keyFile = \"server.key\"<\/code><\/pre>\n\n\n\n<p>Restart the FRP server service.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart frps.service<\/code><\/pre>\n\n\n\n<p>You can open the dashboard by visiting&nbsp;<code>http:\/\/[serverAddr]:7500<\/code>&nbsp;to see the dashboard, with username and password both being&nbsp;<code>admin<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"433\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-server-ui-1024x433.png\" alt=\"\" class=\"wp-image-148022\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-server-ui-1024x433.png 1024w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-server-ui-300x127.png 300w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-server-ui-768x325.png 768w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-server-ui-1536x650.png 1536w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-server-ui-2048x867.png 2048w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-server-ui-696x294.png 696w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-server-ui-1068x452.png 1068w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-server-ui-993x420.png 993w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>When metrics is enabled,<code>http:\/\/{dashboard_addr}\/metrics<\/code>\u00a0will provide prometheus monitor data.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/fatedier\/frp#authenticating-the-client\" rel=\"noopener\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Client Admin UI<\/h4>\n\n\n\n<p>The Client Admin UI helps you check and manage frpc&#8217;s configuration. You need to edit client configuration and set an address for admin UI to enable this feature:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">sudo vim \/etc\/frp\/frpc.toml<\/mark>\nwebServer.addr = \"127.0.0.1\"\nwebServer.port = 7400\nwebServer.user = \"admin\"\nwebServer.password = \"admin\"<\/code><\/pre>\n\n\n\n<p>Setting <code>webServer.addr = \"0.0.0.0\"<\/code> means listen on all interfaces.<\/p>\n\n\n\n<p>Restart FRP Client service<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart frpc<\/code><\/pre>\n\n\n\n<p>Now visit <code>http:\/\/clientip:7400<\/code> to see admin UI, with username and password both being admin.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-client-ui-1024x216.png\" alt=\"\" class=\"wp-image-148024\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-client-ui-1024x216.png 1024w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-client-ui-300x63.png 300w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-client-ui-768x162.png 768w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-client-ui-1536x324.png 1536w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-client-ui-2048x432.png 2048w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-client-ui-696x147.png 696w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-client-ui-1068x225.png 1068w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/11\/frp-client-ui-1989x420.png 1989w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>You can now run FRP as a daemon. This helps if you want to run the service in the background, and also for management purposes.<\/p>\n\n\n\n<p>Visit <a href=\"https:\/\/github.com\/fatedier\/frp\" target=\"_blank\" rel=\"noreferrer noopener\">FRP Github documentation pages<\/a> to learn more about this amazing project.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n\n\n\n<p>We have successfully installed FRP proxy and configured it. This is a tool that can be very useful to system administrators who wish to access their locally hosted services through the internet. If this post has been useful to you, feel free to share and comment.<\/p>\n\n\n\n<p>More articles to read on our website:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/computingforgeeks.com\/posh-git-powershell-environment-for-git\/\" target=\"_blank\" rel=\"noreferrer noopener\">Install posh-git on Windows &#8211; PowerShell environment for Git<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/computingforgeeks.com\/install-kimai-time-tracking-application\/\" target=\"_blank\" rel=\"noreferrer noopener\">Install Kimai web-based time tracking application<\/a><\/li>\n\n\n\n<li>Configure KVM Networking With virsh, nmcli and brctl in Linux<\/li>\n\n\n\n<li><a href=\"https:\/\/computingforgeeks.com\/faraday-penetration-test-vulnerability-management-ide\/\" target=\"_blank\" rel=\"noreferrer noopener\">Faraday &#8211; Penetration Testing IDE &amp; Vulnerability Management Platform<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/computingforgeeks.com\/chezmoi-manage-dotfiles-across-multiple-machines\/\" target=\"_blank\" rel=\"noreferrer noopener\">Chezmoi &#8211; Securely Manage dotfiles across multiple machines<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>It is usually a big challenge for geeks who would love to access their local server over the internet. Don&#8217;t you worry no more, we shall be exploring a tool that can be used to expose your local server and services behind a firewall on NAT over the internet. In this article you&#8217;ll learn to &#8230; <a title=\"Expose Local Server behind NAT to Internet using FRP Proxy\" class=\"read-more\" href=\"https:\/\/computingforgeeks.com\/expose-local-server-to-internet-using-frp-proxy\/\" aria-label=\"Read more about Expose Local Server behind NAT to Internet using FRP Proxy\">Read more<\/a><\/p>\n","protected":false},"author":17,"featured_media":77394,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[299,50,55,2666],"tags":[9217,222,348],"class_list":["post-77385","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to","category-linux-tutorials","category-networking","category-tips-tricks","tag-internet","tag-nat","tag-proxy"],"_links":{"self":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/77385","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/comments?post=77385"}],"version-history":[{"count":0,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/77385\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media\/77394"}],"wp:attachment":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media?parent=77385"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/categories?post=77385"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/tags?post=77385"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}