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

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

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

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

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

Pagekite的工作原理

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

运行您自己的前端中继需要花费一点钱,但是PageKite开发人员提供了31天的免费帐户供您试用。 让我们看看如何通过免费帐户使用PageKite。 本教程将仅显示如何公开本地Web服务器。 公开本地SSH服务器将在另一个教程中进行讨论。

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

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

sudo apt install apache2

启动Web服务器

sudo systemctl start apache2

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

Debian 8/9,Ubuntu 16.04 / 18.04,Raspbian及其衍生版本

sudo apt install pagekite

接下来,运行以下命令。 更换 name 与所需的子域。

pagekite name.pagekite.me

它将首先询问您是否要使用免费的PageKite.net服务。 由于您还没有自己的PageKite服务器,因此请选择 ÿ

然后,PageKit将提示您使用您的电子邮件地址注册一个PageKite.net帐户。

pagekite ubuntu

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

将Localhost暴露给Internet

现在,PageKite将连接到前端。

pagekite本地主机

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

name.pagekite.me

要么

https://name.pagekite.me

pagekite教程隧道反向代理

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

pagekite --daemonize name.pagekite.me

要停止守护的PageKite,请运行

pkill pagekite

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

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

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

如何运行自己的PageKite服务器

pagekite.net的免费试用版非常有限。 但是,我们可以在面向公众的Linux VPS(虚拟专用服务器)上运行自己的PageKite服务器(也称为前端)。 尽管这要花钱,但是运行自己的PageKite服务器还是值得的。 如果您选择支付PageKite.net服务,那么每月5美元,您将仅获得4GB的传输配额。

页面风筝定价

如果您从TurnkeyInternet购买Linux VPS并在其上运行自己的PageKite服务器,则每月只需支付4.99 USD,即可获得千兆网络端口和不限流量的带宽。 此外,您可以在VPS上执行其他有趣的项目,例如设置自己的VPN。

Turnkeyinternet vps

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

现在,假设您已经购买了VPS和域名,这是运行前端pagekite服务器的方法。 在Linode控制面板中的VPS上安装Ubuntu 18.04 OS。 然后通过SSH进入您的VPS,并使用以下命令安装Pagekite。

sudo apt update

sudo apt install pagekite

pagekite.net网站上还有在CentOS上安装RPM软件包的说明。 安装pagekite后,配置目录位于 /etc/pagekite.d/ 。 我们需要编辑 20_frontends.rc 文件。

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

注释掉读取的行 defaults 因为我们不想使用pagekite.net服务。 接下来,在文件末尾添加以下行。 更换 kite.your-domain.com 用您自己的域名和 your-secret-key 与您的首选密钥。 我使用我的域名 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创建一个子域,其A记录指向您的VPS的IP地址,如下所示。

A     kite.your-domain.com    12.34.56.78

为PageKite服务器创建系统服务单元

默认的systemd服务文件 /lib/systemd/system/pagekite.service 供客户使用。 我们可以为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_account.rc 文件

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

这是PageKite客户端使用的配置文件。 PageKite系统服务将读取每个 .rc 归档在 /etc/pagekite.d/ 目录按字典顺序排列,因此我们需要注释掉此文件中的所有内容。 之后,您可以终止守护进程的pagekite服务器进程。

sudo pkill pagekite

重新启动 systemctl

sudo systemctl start pagekite

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

sudo systemctl enable pagekite

要禁用自动启动,请运行

sudo systemctl disable pagekite

检查其状态。

systemctl status pagekite

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

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

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

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

运行pagekite服务器

保存并关闭文件。 然后编辑 20_frontends.rc 文件。

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

注释掉读取的行 defaults。 然后添加以下行。

frontend = your-pagekite-server-IP:80

运行pagekite前端

保存并关闭文件。 接下来,重命名 80_httpd.rc.sample80_httpd.rc

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服务将尝试重新建立连接。

如何使用pagekite

注意:如果您运行命令 pagekite name.pagekite.me 在您的本地计算机上,它将使用 ~/.pagekite.rc 用户配置文件,默认情况下使用pagekite.net服务。

多个虚拟主机

本节说明如何使家庭网络上的多个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/

然后创建一个index.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/

然后创建一个index.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_frontends.rc PageKite服务器上的文件。

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 A记录。 现在,如果我访问 http://site1.csmage.com,我得到

安装pagekite ubuntu

如果我去 http://site2.csmage.com,我得到

pagekite debian

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

如何启用HTTPS

我们可以在后端或前端终止TLS。 前者更容易,也更方便。 因此,我将向您展示如何在本地计算机上安装TLS证书。 我们可以为每个子域免费获取Let’s Encrypt TLS证书。 首先,在本地计算机上安装Let’s Encrypt客户端(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

说明:

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

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

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

添加两个HTTPS后端定义,如下所示。 请注意,HTTPS请求将发送到本地主机上的端口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。

pagekite如何工作

运行自己的pagekite服务器

自动续订TLS证书

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

systemctl status certbot.timer

如果certbot cron作业检测到还有一个systemd计时器,则它将不会运行renew命令。

包起来

而已! 我希望此PageKite教程可以帮助您通过Ubuntu上的PageKite将localhost公开给Internet。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻通讯以获取更多提示和技巧trick

Sidebar