当前位置:   article > 正文

使用IPV6免费远程连接家庭网络_ipv6远程

ipv6远程

现在IPV4地址越来越枯竭了,普通家庭宽带想获取公网ip也越来越难了,被逼无奈,又不想花钱租公网服务器,就想用IPV6来进行远程连接。

前提条件

1、服务端有IPV6公网地址。现在家庭宽带应该都有,没有的让运营商开下应该就行。

2、光猫或路由器启用IPV6。现在新的路由器基本都支持IPV6的,但一般默认是关掉IPV6的,可以设置开启。如果是光猫接路由,然后服务端主机连路由的,光猫需要设置为桥接模式,使用路由器拨号,经过NAT转换的是不能用公网IPV6的。

3、客户端也需有IPV6地址。用手机流量是有IPV6的,如果是WiFi,那跟服务端一样,需要光猫或路由器启用IPV6。

查看IPV6地址

windows上通过ipconfig -all命令可以查看本机所有网卡的信息,包括IPV6地址。

注意公网IPV6是以240开头的,fe80开头的是内网地址。

IPV6的公网地址可能有好几个,有DHCP动态获取的,有手动配置的,有通过MAC地址计算获得的,有随机生成的临时地址。

这里可以先随便找个非临时的地址,尝试进行连接。

比如windows的远程桌面服务,是会同时监听IPV4和IPV6的3389端口的,直接用240开头的公网IPV6地址就可以连接了。

上传IPV6地址

因为路由器重新拨号或运营商强制重新拨号等原因,IPV6的地址前缀会变动,所以我们需要做一个自动检测IP变化并让客户端可以获取的功能。

这里使用腾讯云的COS来存储当前服务IP地址,对普通用户来讲是完全免费的,因为使用量是达不到收费标准的。

对象存储 COSCLI 简介-工具指南-文档中心-腾讯云

编写ps1脚本:

  1. $url = "https://xxxx.cos.ap-xxxx.myqcloud.com/"
  2. $file = "ip.txt"
  3. $response = (Invoke-WebRequest -Uri ($url + $file))
  4. $curip = $response.Content.Trim()
  5. while(1)
  6. {
  7. $ips = Get-NetIPAddress -AddressFamily IPv6
  8. Foreach($ip in $ips)
  9. {
  10. if($ip.IPAddress.StartsWith("240") -and $ip.SuffixOrigin -ceq "Link") #使用根据MAC计算出来的IPV6,相对比较固定
  11. {
  12. if($ip.IPAddress -cne $curip)
  13. {
  14. Write-Host $ip.IPAddress
  15. $ip.IPAddress | Out-File -Encoding ascii $file
  16. .\coscli -c .\.cos.yaml cp $file cos://mycos/
  17. $response = Invoke-WebRequest -Uri ($url + $file)
  18. $curip = $response.Content.Trim()
  19. }
  20. break
  21. }
  22. }
  23. Sleep 60
  24. }

这里就是每60秒检测一次当前的IPV6地址,如果与当前记录的IP地址不一致,就把当前IPV6地址通过coscli.exe工具上传到腾讯云COS,coscli.exe可以在上面链接的官方网站下载,coscli需要配置文件.cos.yaml,可参考官方说明。以下为.cos.yaml示例:

  1. cos:
  2. base:
  3. secretid: XXXXX
  4. secretkey: XXXXX
  5. sessiontoken: XXXX
  6. protocol: https
  7. buckets:
  8. - name: XXXXX
  9. alias: mycos
  10. region: ""
  11. endpoint: cos.ap-XXXX.myqcloud.com
  12. ofs: false

下载IPV6地址

因为IP会变,每次重新输入那一长串IP地址也不舒服,所以可以将ip地址转为固定的域名。

当然了,我们的口号是免费,申请域名或者动态域名之类的事是不会去做的。当然也不全是因为免费的事,我的概念是尽量少依赖第三方,那些都是不稳定的因素。

电脑上可以从腾讯云COS中下载最新IP地址并写入hosts文件。如果是手机就没办法了,毕竟手机上没root过的是没有写hosts文件的权限的。

如果只是用手机端的远程桌面,可以在ip变化后用浏览器打开cos地址获取最新ip,再复制粘贴到手机远程桌面app就行了,也不算很麻烦,毕竟ip变化也不是很频繁。

如果是自己开发的客户端,比如游戏客户端,可以直接在客户端代码里从cos获取服务器ip地址。

以下是windows中自动获取ip地址并写入hosts的ps1脚本:

  1. $hostname = "myhost"
  2. $response = Invoke-WebRequest -uri https://xxxx.cos.ap-xxxx.myqcloud.com/ip.txt
  3. $ip = $response.Content.Trim()
  4. if(!$ip.StartsWith("240")) {
  5. echo $ip
  6. exit
  7. }
  8. $newline = "$ip $hostname"
  9. $content = ""
  10. $hasold = 0
  11. foreach($line in Get-Content C:\Windows\System32\drivers\etc\hosts) {
  12. if($line -match $hostname){
  13. $content = $content+$newline+"`n"
  14. $hasold = 1
  15. }else{
  16. $content = $content+$line+"`n"
  17. }
  18. }
  19. if ($hasold -eq 0){
  20. $content = $content + $newline
  21. }else{
  22. $content = $content.Substring(0, $content.Length - 1)
  23. }
  24. $content | Out-File -Encoding ascii C:\Windows\System32\drivers\etc\hosts
  25. echo 已将$newline"写入hosts文件"
  26. cmd /c pause

这里给服务器起了别名myhost,也就是直接使用myhost作为地址就可以访问服务器了。

服务代理

windows的远程桌面服务、linux的ssh服务等都是默认同时监听IPV4和IPV6的,都没问题。但是很多服务是只支持IPV4的,这里就需要进行端口转发,将IPV6端口收到的消息转发给IPV4端口。

1、nginx可以实现端口转发功能,以下是nginx的配置示例:

  1. stream{
  2. upstream ssh{
  3. server 192.168.1.7:22; #监听IPV622端口转发到局域网192.168.1.7上的ssh服务
  4. }
  5. server {
  6. listen [::]:22;
  7. proxy_pass ssh;
  8. }
  9. upstream web{
  10. server 127.0.0.1:80; #监听IPV681端口转发到本机IPV480端口
  11. }
  12. server {
  13. listen [::]:81;
  14. proxy_pass web;
  15. }
  16. }

2、windows上还有个自带的端口转发服务更简单,使用管理员运行powershell:

  1. #添加端口转发
  2. netsh interface portproxy add v6tov4 listenaddress=* listenport=81 connectaddress=127.0.0.1 connectport=80 protocol=tcp
  3. #删除端口转发
  4. netsh interface portproxy delete v6tov4 listenport=22
  5. #查看所有端口转发
  6. netsh interface portproxy show all

这里添加端口转发后重启后也是会自动生效的。

大功告成!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/183918
推荐阅读
相关标签
  

闽ICP备14008679号