6

我在 digitalocean 中创建了一个 droplet,我可以使用一个 vps_ip。
在我家连接互联网的方式是:route+modem+adsl。
我在家里的本地电脑上构建了一个 wordpress。
网络状态如下,何时连接到网络。

WAN:
MAC:ommitted for privacy
IP :public_ip PPPoE
subnet mask:255.255.255.255
gateway:153.0.68.1
DNS:114.114.114.114 223.5.5.5

LAN
MAC:ommitted for privacy
IP :192.168.1.1
subnet mask:255.255.255.0
DHCP:active

ifconfig
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0                                                                    

我的目标:让公众使用 vps_ip digitalocean 给我的家用电脑访问我的 wordpress 网站。

感谢 CrypticDesigns 。
https://www.digitalocean.com/community/questions/how-to-map-my-local-ip-192-168-1-100-with-my-vps_ip
我在 CrypticDesigns 的帮助下解决了这个问题。

在我的本地网络中:
在我的路由器上将端口 80 和私有 ip 192.168.1.100 转发到您的网络外部。

在公共液滴系统中:

sudo apt-get install nginx
sudo nano /etc/nginx/sites-available/default
server {
    listen *:80;
    server_name vps_ip;
    rewrite .* http://publlic_ip$request_uri permanent; 
}
sudo service nginx restart

任何去 vpsip 的人现在都可以浏览我的 wordpress。
重要的是我在WAN上的IP地址大约每30分钟改变一次。30分钟后怎么样?
publicip 会改变,配置文件 /etc/nginx/sites-available/default 不能工作。
我想对这个问题进行改进。
我认为完成任务是: 1.在
我家的电脑
上 curl ipinfo.io/ip 命令可以获取我的公共 ip。
每 30 分钟将其写入 crontab。
2.发送vpsip,修改/etc/nginx/sites-available/default中publicip的值
,重启nginx。

如何用shell命令表达这两个步骤以使过程自动化?

4

4 回答 4

1

如果您在 Google 上搜索“dyndns”,您会发现多个免费提供“动态域名”的提供商。您应该注册其中之一。

有很多客户端可以使动态域名与您的动态 IP 地址保持同步。您选择的 dyndns 提供商可能拥有您需要的有关适合其服务的客户的所有信息。只需在您的家用电脑上运行客户端,viola,动态域名将始终指向您的动态IP!甚至有些家用路由器可以为你更新动态域名,然后你甚至不用运行客户端。

然后更改您的 nginx 配置以指向您的动态域名(而不是您的 IP)。

于 2015-08-22T22:48:59.623 回答
1
  1. 我建议您使用proxy_passand upstream,而不是使用rewrite. 这将确保您的网站始终可以通过您的 VPS 提供商访问,而不会泄露您的动态 IPv4 地址,该地址可能会不时更改(因此,如果您通过rewrite指令使用重定向,您的用户可能创建的书签也会失效)使 Google/Yandex 等生成的搜索索引无效)。

    1. 正如其他人所建议的那样,您可以使用其中一个动态 DNS 提供商来确保始终拥有一个解析为您的 IPv4 地址的域名,然后在 nginx 配置中使用这样的域名。只是一些最受欢迎的选项:

      但是请注意,nginx 只会在启动时尝试解析域名一次,因此,您必须不断重新启动它才能获取任何可能的更改。

      此外,如果您的 IPv4 地址确实每 30 分钟更改一次,而不是每隔几年左右更改一次,那么无论您执行此更新(无论是否通过动态 DNS),这种方法可能不仅会导致可能的停机时间(您可以proxy_cache在 nginx 中与之抗争),但也允许您的家庭 ISP 的其他订阅者在您的 IPv4 地址更改和在 VPS 上应用更新之间冒充您的网站,或者, ,以防您的线路或电源出现故障。

      因此,我不建议使用动态 DNS 路由。

    2. 与其尝试跟踪您的动态 IPv4 地址,不如取而代之的是,您可能会在获得免费 IPv6 隧道和静态 IPv6 分配方面取得一些成功。在这种情况下,您可以决定直接向全世界发布您的 IPv6 地址,并且只使用 VPS 代理 IPv4 客户端。

      http://SixXS.net/

    3. 与其让你的 VPS 连接到你的家用机器,不如让你的家用机器电话回到 VPS,这将是一种更好、更可靠、更强大的方法。您可以使用 VPN 或 IPsec 解决方案,甚至是普通的旧OpenSSH来完成此类回拨。

      在这种情况下,您只需要 (0) 硬编码在您的 home box 上的 VPS 的地址,以及 (1) 在您的 VPS 上的 nginx 中硬编码的家庭机器的私有 IP 地址和端口号。这将确保不仅没有人可以窃取您的连接(因为它将被完全加密和验证),而且在任何配置文件中都不会硬编码您的动态 IPv4 地址。

      如果使用ssh,您可以使用较新版本中的隧道接口,或者使用普通的旧端口转发。


在 VPS 上:

server {
  listen *:80;
  listen [::]:80;
  server_name vps;
  location / {
      proxy_pass http://127.0.0.1:2280;
  }
}

在家用机器上,假设您在端口 8080 上运行您的 webapp:

sh -xc 'while (true); do ssh -v -N -C -R127.0.0.1:2280:127.0.0.1:8080 -oServerAliveInterval=20 -oServerAliveCountMax=1 user@vps; date; sleep 1; done'

于 2015-08-28T07:25:57.177 回答
1

面对这种情况有很多方法。对我来说,这是最简单的一种,无需安装额外的软件或订阅动态 dns 站点。

我不知道这是否是一个时间问题,但 ipinfo.io 对我不起作用,所以我在解决方案中使用了另一个服务。如果需要,请更改它。

首先,在您的本地 PC 中,将您在远程/etc/nginx/sites-available/default(您称为publlic_ip的那个)中的 IP 写入/tmp/oldIP。只是IP,例如:

20.20.20.20

只需执行一次。然后,将以下脚本保存在您想要的任何位置,为其提供执行权限并将其添加到 cron:

#!/bin/bash

VPS_IP= #fill this 
VPS_USER= #fill this
MyOldIP=$(cat /tmp/oldIP)
MyIP=$(curl http://bot.whatismyipaddress.com)

if [ $MyOldIP != $MyIP ] ; then
  ssh $VPS_USER@$VPS_IP "sudo sed -i 's/$MyOldIP/$MyIP/' /etc/nginx/sites-available/default" \
  && ssh $VPS_USER@$VPS_IP sudo service nginx restart
fi
于 2015-08-29T06:19:06.440 回答
1

我正在使用ddclient,它在基于 Debian 的发行版上应该已经可用

apt-get install ddclient

配置应该不难/etc/ddclient.conf

protocol=dyndns2
syslog=yes
ssl=yes
use=web, web=checkip.dynu.com/, web-skip='IP Address'
server=api.dynu.com
login=<your email>
password='<your password>'
<your subdomain>.dynu.com

它应该支持不同的协议dyndns 提供商,我个人使用dynu.com多年,应该是免费的(我不确定新用户)。

于 2015-08-27T13:23:45.670 回答