如何将动态变化的私人 ip 映射到我的 vps_ip?
How to map my private ip which change dynamically onto my vps_ip?
我已经在 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
我的目标:让 public 使用 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 转发到网络外部。
在public液滴系统中:
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 minutes.How 大约 30 分钟后更改一次?
publicip 会改变,配置文件/etc/nginx/sites-available/default 无法工作。
我想对问题进行改进。
我认为完成任务是这样的:
1.in我家的电脑
命令 curl ipinfo.io/ip 可以得到我的 public ip.
每30分钟写入一次crontab。
2.send vpsip 并更改 /etc/nginx/sites-available/default
中 publicip 的值
,并重启 nginx。
如何用shell命令表达这两个步骤,使过程自动化?
如果您 google "dyndns",您会发现有多个供应商免费为您提供 "dynamic domain name"。您应该注册其中之一。
有很多客户端会让动态域名与您的动态 IP 地址保持同步。您选择的 dyndns 提供商可能拥有您需要的有关适合其服务的客户的所有信息。只需 运行 您家用计算机上的客户端,中提琴,动态域名将始终指向您的动态 IP!甚至一些家庭路由器可以为您更新您的动态域名,然后您甚至不必 运行 客户端。
然后更改您的 nginx 配置以指向您的动态域名(而不是您的 IP)。
我正在使用 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多年,应该是免费的(我我不确定新用户)。
我建议您使用 proxy_pass
and an upstream
,而不是 rewrite
。这将确保您的网站始终可以通过您的 VPS 提供商访问,而不会泄露您的动态 IPv4 地址,该地址可能会不时更改(从而使您的用户可能创建的书签无效,如果您通过rewrite
指令,以及使 Google/Yandex 等生成的搜索索引无效。
正如其他人所建议的那样,您可以使用这些动态 DNS 提供商之一来确保始终拥有一个解析为您的 IPv4 地址的域名,然后在 nginx 配置中使用此类域名.只是一些最受欢迎的选项:
但是请注意,nginx 只会在启动时尝试解析一次域名,因此,您必须不断重新启动它以获取任何可能的更改。
此外,如果您的 IPv4 地址确实每 30 分钟更改一次,而不是每两年左右更改一次,那么无论您如何进行更新(无论是否通过动态 DNS),这种方法可能不仅会导致在可能的停机时间(你可以在 nginx 中使用 proxy_cache
来应对),但也会允许你的家庭 ISP 的订阅者在你的 IPv4 地址更改和更新之间模拟你的网站已应用于 VPS,或者,如果您的线路或电源出现故障。
因此,我不建议使用动态 DNS 路由。
与其尝试跟踪您的动态 IPv4 地址,您可能会成功获得免费的 IPv6 隧道和静态 IPv6 分配。在这种情况下,您可以决定直接向全世界发布您的 IPv6 地址,并且只使用 VPS 来代理 IPv4 客户端。
与其让您的 VPS 连接到您的家用计算机,不如让您的家用计算机 phone 连接到VPS 代替。您可以使用 VPN 或 IPsec 解决方案,甚至是普通的老式 OpenSSH.
来完成此类回电
在这种情况下,您只需将 VPS 的地址硬编码在您的家庭盒子上,以及 (1) 您家庭的私有 IP 地址和端口号在 VPS 上的 nginx 中硬编码的机器。这将确保不仅没有人可以窃取您的连接(因为它会被完全加密和验证),而且在任何配置文件中都不会对您的动态 IPv4 地址进行硬编码。
如果使用 ssh,您可以使用较新版本的隧道接口,或者使用普通的旧端口转发。
在 VPS:
server {
listen *:80;
listen [::]:80;
server_name vps;
location / {
proxy_pass http://127.0.0.1:2280;
}
}
在家用机器上,前提是您 运行 您的 webapp 在端口 8080 上:
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'
面对这个问题有很多方法。对我来说,这是最简单的一种,无需安装额外的软件或订阅动态 dns 站点。
我不知道这是否是时间问题,但 ipinfo.io 对我不起作用,所以我在解决方案中使用了另一个服务。如果需要,请更改它。
首先,在你的本地电脑上,写入你在远程/etc/nginx/sites-available/default中的IP(你调用的那个publlic_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
我已经在 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
我的目标:让 public 使用 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 转发到网络外部。
在public液滴系统中:
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 minutes.How 大约 30 分钟后更改一次?
publicip 会改变,配置文件/etc/nginx/sites-available/default 无法工作。
我想对问题进行改进。
我认为完成任务是这样的:
1.in我家的电脑
命令 curl ipinfo.io/ip 可以得到我的 public ip.
每30分钟写入一次crontab。
2.send vpsip 并更改 /etc/nginx/sites-available/default
中 publicip 的值
,并重启 nginx。
如何用shell命令表达这两个步骤,使过程自动化?
如果您 google "dyndns",您会发现有多个供应商免费为您提供 "dynamic domain name"。您应该注册其中之一。
有很多客户端会让动态域名与您的动态 IP 地址保持同步。您选择的 dyndns 提供商可能拥有您需要的有关适合其服务的客户的所有信息。只需 运行 您家用计算机上的客户端,中提琴,动态域名将始终指向您的动态 IP!甚至一些家庭路由器可以为您更新您的动态域名,然后您甚至不必 运行 客户端。
然后更改您的 nginx 配置以指向您的动态域名(而不是您的 IP)。
我正在使用 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多年,应该是免费的(我我不确定新用户)。
我建议您使用
proxy_pass
and anupstream
,而不是rewrite
。这将确保您的网站始终可以通过您的 VPS 提供商访问,而不会泄露您的动态 IPv4 地址,该地址可能会不时更改(从而使您的用户可能创建的书签无效,如果您通过rewrite
指令,以及使 Google/Yandex 等生成的搜索索引无效。正如其他人所建议的那样,您可以使用这些动态 DNS 提供商之一来确保始终拥有一个解析为您的 IPv4 地址的域名,然后在 nginx 配置中使用此类域名.只是一些最受欢迎的选项:
但是请注意,nginx 只会在启动时尝试解析一次域名,因此,您必须不断重新启动它以获取任何可能的更改。
此外,如果您的 IPv4 地址确实每 30 分钟更改一次,而不是每两年左右更改一次,那么无论您如何进行更新(无论是否通过动态 DNS),这种方法可能不仅会导致在可能的停机时间(你可以在 nginx 中使用
proxy_cache
来应对),但也会允许你的家庭 ISP 的订阅者在你的 IPv4 地址更改和更新之间模拟你的网站已应用于 VPS,或者,如果您的线路或电源出现故障。因此,我不建议使用动态 DNS 路由。
与其尝试跟踪您的动态 IPv4 地址,您可能会成功获得免费的 IPv6 隧道和静态 IPv6 分配。在这种情况下,您可以决定直接向全世界发布您的 IPv6 地址,并且只使用 VPS 来代理 IPv4 客户端。
与其让您的 VPS 连接到您的家用计算机,不如让您的家用计算机 phone 连接到VPS 代替。您可以使用 VPN 或 IPsec 解决方案,甚至是普通的老式 OpenSSH.
来完成此类回电在这种情况下,您只需将 VPS 的地址硬编码在您的家庭盒子上,以及 (1) 您家庭的私有 IP 地址和端口号在 VPS 上的 nginx 中硬编码的机器。这将确保不仅没有人可以窃取您的连接(因为它会被完全加密和验证),而且在任何配置文件中都不会对您的动态 IPv4 地址进行硬编码。
如果使用 ssh,您可以使用较新版本的隧道接口,或者使用普通的旧端口转发。
在 VPS:
server {
listen *:80;
listen [::]:80;
server_name vps;
location / {
proxy_pass http://127.0.0.1:2280;
}
}
在家用机器上,前提是您 运行 您的 webapp 在端口 8080 上:
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'
面对这个问题有很多方法。对我来说,这是最简单的一种,无需安装额外的软件或订阅动态 dns 站点。
我不知道这是否是时间问题,但 ipinfo.io 对我不起作用,所以我在解决方案中使用了另一个服务。如果需要,请更改它。
首先,在你的本地电脑上,写入你在远程/etc/nginx/sites-available/default中的IP(你调用的那个publlic_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