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

    本教程将向您展示如何在Ubuntu上使用PageKit将localhost公开到Internet。 通常,如果你想从外部访问你的家庭网络服务器,你需要设置动态DNS,因为你的ISP不会给你一个静态的公共IP地址。但世界上的一些ISP甚至不为每个订户分配动态公共IP地址。许多订户共享一个公共IP地址。在这种情况下,动态DNS将无法工作,这就是PageKite的用武之地。 PageKite是一种开源隧道反向代理,能够绕过NAT(网络地址转换)、防火墙,并使本地web服务器和SSH服务器对公共互联网可见。如果你是一名网络开发者,或者在你的家庭网络上有一些像NextCloud这样的自托管服务,那么PageKite可以帮助你通过互联网远程访问它们。PageKite是用Python编写的,因此可以在多种设备上运行。 注意:使您的web服务器/SSH服务器在Internet上可见也会使它们暴露给黑客。 Pagekite的工作原理 您的服务(通常是一个或多个HTTP服务器)在本地主机上运行。 在同一台机器上运行pagekite作为后端连接器。 pagekite的另一个实例是作为前端中继在“云”中的一台具有公共IP地址的机器上运行。 后端pagekite连接到前端,并为配置的服务创建通道。 客户端(通常是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. 然后PageKit会提示您注册PageKite。net帐户使用您的电子邮件地址。 您的帐户详细信息(包括密码)将发送到您的电子邮件地址。打开电子邮件并单击其中的链接以激活您的帐户。然后输入Y继续并保存设置。 现在PageKite将连接到前端。 您应该能够使用域名访问本地web服务器。 name.pagekite.me 或 https://name.pagekite.me 要停止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的转账配额。 如果你从TurnkeyInternet购买Linux VPS并在其上运行自己的PageKite服务器,那么每月4.99美元,你就可以获得千兆网络端口和未测量的带宽。此外,你还可以在VPS上做其他有趣的项目,比如建立自己的VPN。 你还需要一个域名。你可能听说过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服务器上指定的域名和密钥。并注释掉最后一行。 保存并关闭文件。然后编辑20_前端。rc文件。 sudo nano /etc/pagekite.d/20_frontends.rc 注释掉读取默认值的行。然后添加以下行。 frontend = your-pagekite-server-IP:80 保存并关闭文件。接下来,重新命名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服务将尝试重新建立连接。 注意:如果运行命令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,我明白了 如果我去http://site2.csmage.com,我明白了 如您所见,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。 自动更新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暴露在互联网上。和往常一样,如果你觉得这篇文章有用,订阅我们的免费时事通讯,获取更多提示和窍门?

    2022.03.24 浏览:591