使用Ubuntu上的PageKite将Localhost公开到Internet

  • 技术文档
  • 2022.03.24
  • 浏览:206

本教程将向您展示如何在Ubuntu上使用PageKit将localhost公开到Internet。

通常,如果你想从外部访问你的家庭网络服务器,你需要设置动态DNS,因为你的ISP不会给你一个静态的公共IP地址。但世界上的一些ISP甚至不为每个订户分配动态公共IP地址。许多订户共享一个公共IP地址。在这种情况下,动态DNS将无法工作,这就是PageKite的用武之地。

PageKite是一种开源隧道反向代理,能够绕过NAT(网络地址转换)、防火墙,并使本地web服务器和SSH服务器对公共互联网可见。如果你是一名网络开发者,或者在你的家庭网络上有一些像NextCloud这样的自托管服务,那么PageKite可以帮助你通过互联网远程访问它们。PageKite是用Python编写的,因此可以在多种设备上运行。

注意:使您的web服务器/SSH服务器在Internet上可见也会使它们暴露给黑客。

Pagekite的工作原理

  1. 您的服务(通常是一个或多个HTTP服务器)在本地主机上运行。
  2. 在同一台机器上运行pagekite作为后端连接器。
  3. pagekite的另一个实例是作为前端中继在“云”中的一台具有公共IP地址的机器上运行。
  4. 后端pagekite连接到前端,并为配置的服务创建通道。
  5. 客户端(通常是web浏览器)连接到前端并请求服务。前端通过适当的隧道转发请求,后端将其转发到实际服务器。反应以同样的方式返回。

运行自己的前端中继需要一点钱,但PageKite开发者提供31天的免费帐户供您试用。让我们看看如何使用免费帐户的PageKite。本教程仅介绍如何公开本地web服务器。公开本地SSH服务器将在另一个教程中讨论。

使用Ubuntu上的PageKite将Localhost公开到Internet

首先,在本地Linux计算机上安装一个web服务器,如Apache。在基于Debian/Ubuntu的Linux发行版上,运行以下命令安装ApacheWeb服务器。

sudo apt install apache2

启动web服务器

sudo systemctl start apache2

现在Apache正在监听端口80。我们使用PageKite使其在互联网上可见。使用以下命令在Linux计算机上安装PageKit。

Debian 8/9、Ubuntu 16.04/18.04、Raspbian及其衍生物

sudo apt install pagekite

接下来,运行以下命令。将名称替换为所需的子域。

pagekite name.pagekite.me

它会先问你是否想使用免费的PageKite。网络服务。因为你还没有自己的PageKite服务器,所以选择Y.
pagekite tutorial

然后PageKit会提示您注册PageKite。net帐户使用您的电子邮件地址。

pagekite ubuntu

您的帐户详细信息(包括密码)将发送到您的电子邮件地址。打开电子邮件并单击其中的链接以激活您的帐户。然后输入Y继续并保存设置。

Expose Localhost to Internet

现在PageKite将连接到前端。

pagekite localhost

您应该能够使用域名访问本地web服务器。

name.pagekite.me

https://name.pagekite.me

pagekite tutorial tunneled reverse proxy

要停止PageKite,请在终端窗口中按Ctrl+C。如果要在后台运行PageKite,请使用--daemonize选项。

pagekite --daemonize name.pagekite.me

要停止daemonized PageKite,请运行

pkill pagekite

您可以使用HTTP基本身份验证对您的网页进行密码保护,如下所示。

pagekite name.pagekite.me +password/username=pass

佩吉特。net允许付费会员通过设置CNAME记录来使用自己的域名。说明可以在其网站上找到。

如何运行自己的PageKite服务器

免费试用pagekite。net是非常有限的。但是,我们可以在面向公共的Linux VPS(虚拟专用服务器)上运行自己的PageKite服务器(也称前端)。虽然这很费钱,但运行自己的PageKite服务器是非常值得的。如果你选择支付PageKite。net服务,然后每月5美元,您只能获得4GB的转账配额。

pagekite pricing

如果你从TurnkeyInternet购买Linux VPS并在其上运行自己的PageKite服务器,那么每月4.99美元,你就可以获得千兆网络端口和未测量的带宽。此外,你还可以在VPS上做其他有趣的项目,比如建立自己的VPN。

turnkeyinternet vps

你还需要一个域名。你可能听说过GoDaddy,但你想从Namecheap购买域名,因为它们的价格比GoDaddy低,而且它们免费为你提供whois隐私保护。

现在,假设您购买了一个VPS和一个域名,下面介绍如何运行前端pagekite服务器。在Linode控制面板中的VPS上安装Ubuntu18.04操作系统。然后将SSH连接到VPS中,并使用以下命令安装Pagekite。

sudo apt update  sudo apt install pagekite

风筝。net网站还提供了在CentOS上安装RPM软件包的说明。安装pagekite后,配置目录位于/etc/pagekite。d/。我们需要编辑20_前端。rc文件。

sudo nano /etc/pagekite.d/20_frontends.rc

注释掉读取默认值的行,因为我们不想使用pagekite。网络服务。接下来,在文件末尾添加以下行。更换风筝。你的领域。用你自己的域名和你的密钥与你的首选密钥。我使用我的域名kite。csmage。com为例。

isfrontend runas=nobody:nogroup ports=80,443 protos=http,https domain=http,https:kite.your-domain.com:your-secret-key

保存并关闭文件。然后用下面的命令启动Pagekite服务器,指定选项文件。因为PageKite服务器需要TCP端口80和443才能工作,所以我们需要用sudo作为命令的前缀。还要确保VPS上没有其他进程使用这两个端口。

sudo pagekite --optfile=/etc/pagekite.d/20_frontends.rc

要在后台运行Pagekite服务器,请使用--daemonize选项。

sudo pagekite --optfile=/etc/pagekite.d/20_frontends.rc --daemonize

在DNS管理器中,为pagekite创建一个子域,其中的记录指向VP的IP地址,如下所示。

A     kite.your-domain.com    12.34.56.78

为PageKite服务器创建Systemd服务单元

默认的systemd服务文件/lib/systemd/system/pagekite。服务旨在用作客户端。我们可以为PageKite服务器创建一个单独的systemd服务文件。

sudo nano /etc/systemd/system/pagekite.service

将以下行复制并粘贴到文件中。

[Unit] Description=PageKite After=network.target  [Service] Type=simple ExecStart=/usr/bin/pagekite --clean --optdir=/etc/pagekite.d/ TimeoutStopSec=5 KillMode=mixed  PermissionsStartOnly=true Restart=on-abnormal RestartSec=2s LimitNOFILE=65536 WorkingDirectory=/tmp  # Hardening [email protected] @debug @cpu-emulation @debug @keyring @module @mount @obsolete @raw-io @reboot @swap NoNewPrivileges=yes PrivateDevices=yes PrivateTmp=yes ProtectHome=yes ProtectSystem=strict ProtectKernelModules=yes ProtectKernelTunables=yes  [Install] WantedBy=multi-user.target

保存并关闭文件。然后重新加载systemd以使更改生效。

sudo systemctl daemon-reload

接下来,开立10_账户。rc文件

sudo nano /etc/pagekite.d/10_account.rc

这是PageKite客户端使用的配置文件。PageKite systemd服务将读取每个。rc文件位于/etc/pagekite中。d/目录,所以我们需要注释掉这个文件中的所有内容。之后,可以终止daemonized pagekite服务器进程。

sudo pkill pagekite

用systemctl重新启动它。

sudo systemctl start pagekite

要在系统启动时启用自动启动,请运行

sudo systemctl enable pagekite

要禁用自动启动,请运行

sudo systemctl disable pagekite

检查它的状态。

systemctl status pagekite

将Pagekite客户端配置为使用自己的服务器

在安装了Pagekite客户端的本地计算机上,编辑10_帐户。rc文件。

sudo nano /etc/pagekite.d/10_account.rc

将kitename和KiteCret的值分别替换为您在Pagekite服务器上指定的域名和密钥。并注释掉最后一行。

run pagekite server

保存并关闭文件。然后编辑20_前端。rc文件。

sudo nano /etc/pagekite.d/20_frontends.rc

注释掉读取默认值的行。然后添加以下行。

frontend = your-pagekite-server-IP:80

run pagekite front end

保存并关闭文件。接下来,重新命名80_httpd。rc。样品至80_httpd。钢筋混凝土

sudo mv /etc/pagekite.d/80_httpd.rc.sample /etc/pagekite.d/80_httpd.rc

在本地计算机上重新启动Pagekite服务。

sudo systemctl restart pagekite

您的本地Pagekite客户端现在应该连接到您自己的Pagekite服务器。您可以通过运行以下命令来检查连接详细信息:

sudo systemctl status pagekite

您的本地web服务器现在已暴露于Internet。如果与Pagekite服务器的连接丢失,Pagekite服务将尝试重新建立连接。

how to use pagekite

注意:如果运行命令pagekite name。佩吉特。在你的本地计算机上,它将使用~/。佩吉特。rc用户配置文件,默认使用pagekite。网络服务。

多个虚拟主机

本节介绍如何使家庭网络上的多个Apache虚拟主机对Internet可见。首先,让我创建两个示例Apache虚拟主机。

第一虚拟主机

sudo nano /etc/apache2/sites-available/site1.csmage.com.conf

此文件中的内容:

<VirtualHost *:80>        ServerName site1.csmage.com        DocumentRoot /var/www/site1.csmage.com/ </VirtualHost>

创建文档根目录。

sudo mkdir /var/www/site1.csmage.com/

然后创建一个索引。html文件。

echo "This is site #1." | sudo tee /var/www/site1.csmage.com/index.html

第二虚拟主机

sudo nano /etc/apache2/sites-available/site2.csmage.com.conf

此文件中的内容:

<VirtualHost *:80>        ServerName site2.csmage.com        DocumentRoot /var/www/site2.csmage.com/ </VirtualHost>

创建文档根目录。

sudo mkdir /var/www/site2.csmage.com/

然后创建一个索引。html文件。

echo "This is site #2." | sudo tee /var/www/site2.csmage.com/index.html

启用这两个虚拟主机。

sudo a2ensite site1.csmage.com  sudo a2ensite site2.csmage.com

重新加载Apache web服务器以使更改生效。

sudo systemctl reload apache2

PageKite服务器配置

编辑20_前端。PageKite服务器上的rc文件。

sudo nano /etc/pagekite.d/20_frontends.rc

添加两个域定义,如下所示。

domain=http,https:site1.csmage.com:secret-key domain=http,https:site2.csmage.com:secret-key

保存并关闭文件。然后重启PageKite。

sudo systemctl restart pagekite

PageKite客户端配置

编辑80_httpd。本地计算机上的rc文件。

sudo nano /etc/pagekite.d/80_httpd.rc

添加两个后端定义,如下所示。

service_on = http:site1.csmage.com : localhost:80 : secret-key service_on = http:site2.csmage.com : localhost:80 : secret-key

保存并关闭文件。然后重启PageKite。

sudo systemctl restart pagekite

最后,为每个子域添加DNS记录。现在如果我去http://site1.csmage.com,我明白了

install pagekite ubuntu

如果我去http://site2.csmage.com,我明白了

pagekite debian

如您所见,Pagekite正确响应了每个HTTP请求。如果它不适合您,请检查您的密钥是否匹配,或者您的配置文件中是否有输入错误。

如何启用HTTPS

我们可以在后端或前端终止TLS。前者更容易、更方便。因此,我将向您展示如何在本地计算机上安装TLS证书。我们可以为每个子域获得免费的Let's Encrypt TLS证书。首先,在本地计算机上安装Let's Encrypt client(certbot)和Apache插件。

sudo apt install certbot python3-certbot-apache

然后使用下面的命令为每个子域获取并安装TLS证书。

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --must-staple --email your-email-address -d site1.your-domain.com  sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --must-staple --email your-email-address -d site2.your-domain.com

说明:

  • --同意:同意服务条款。
  • --重定向:将HTTP重定向到HTTPS
  • --hsts:启用严格的传输安全标头。
  • --装订ocsp:启用ocsp装订
  • --必须装订:将OCSP必须装订扩展添加到证书。

成功获取并安装证书后,编辑80_httpd。本地计算机上的rc文件。

sudo nano /etc/pagekite.d/80_httpd.rc

添加两个HTTPS后端定义,如下所示。请注意,HTTPS请求将被发送到localhost上的端口443。

service_on = https://site1.your-domain.com : localhost:443: your-secret-key service_on = https://site2.your-domain.com : localhost:443: your-secret-key

保存并关闭文件。然后重新启动pagekite客户端。

sudo systemctl restart pagekite

现在我的网站会自动重定向到HTTPS。

how pagekite works

run your own pagekite server

自动更新TLS证书

certbot debian软件包附带了自己的cron作业(/etc/cron.d/certbot)和systemd计时器(/lib/systemd/system/certbot.timer),用于自动续订TLS证书。因此,您不需要手动添加cron作业或systemd计时器。计时器运行certbot。一天服务两次。您可以通过以下方式检查其状态:

systemctl status certbot.timer

如果certbot cron作业检测到还有systemd计时器,那么它将不会运行续订命令。

收尾

就这样!我希望这个PageKite教程能帮助你通过Ubuntu上的PageKite将localhost暴露在互联网上。和往常一样,如果你觉得这篇文章有用,订阅我们的免费时事通讯,获取更多提示和窍门?