如何将我的私有IP映射到我的vps_ip动态变化?

时间:2015-08-20 10:49:39

标签: shell nginx nat adsl

我在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                                                                    

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

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

在我的本地网络中:
在我的路由器portforward端口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无法正常工作 我想对这个问题进行改进 我的意见是完成任务:
在我家里的电脑上 命令curl ipinfo.io/ip可以获取我的公共IP 每隔30分钟将其写入crontab 2.发送vpsip并在/ etc / nginx / sites-available / default中更改publicip的值 ,并重新启动nginx。

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

4 个答案:

答案 0 :(得分:1)

如果你谷歌“dyndns”,你会发现多个提供商免费提供“动态域名”。你应该注册其中一个。

有许多客户端会使动态域名与您的动态IP地址保持同步。您选择的dyndns提供商可能会获得有关适合其服务的客户所需的所有信息。只需在家用计算机和中提琴上运行客户端,动态多曼名称将始终指向您的动态IP!甚至一些家用路由器也可以为您更新动态域名,然后您甚至不必运行客户端。

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

答案 1 :(得分:1)

我正在使用基于Debian的发行版的ddclient

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多年,应该是免费的(我不确定新用户)

答案 2 :(得分:1)

  1. 我建议你使用proxy_passupstream,而不是rewrite。这将确保您的网站始终可通过您的VPS提供商获得,而不会泄露您的动态IPv4地址,该地址可能会不时更改(从而使您的用户可能通过{{1}使用重定向的书签无效}指令,以及使Google / Yandex等生成的搜索索引无效。

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

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

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

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

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

      http://SixXS.net/

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

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

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

  2. 在VPS上:

    rewrite

    在家用计算机上,只要您在端口8080上运行webapp:

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

答案 3 :(得分: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