技术积累
日进一寸

内网服务穿透(中)|端口映射+ddns+nginx+实现免费https

上期内网服务映射需要一台独立ip得公网服务器搭建frp,本期直接通过在路由器上端口映射来开放内网服务到公网。

本期视频操作需要的条件:

1、以下操作几乎都是基于docker容器,建议安装portainer容器管理工具

2、家庭拨号成功后获得得ip是公网ip,判断方法:

在路由器中查看路由器拨号获取到的ip,对比访问ip138.com显示得ip,如果一致,则说明自己的环境是有独立公网ip得

获取自己的公网ip https://www.ip138.com

3、有域名,可以是自己购买的域名,也可以是免费多级域名。

提供免费域名服务的网站,自行申请:

https://www.duckdns.org

https://www.eu.org

本文以duckdns为例:匿名即可注册,eu这个需要实名,比较麻烦。

并域名解析到自己得独立ip上;

在docker中创建一个容器,进行ddns解析:

docker cli (click here for more info)

docker run -d \
  --name=duckdns \
  --net=host `#optional` \
  -e PUID=1000 `#optional` \
  -e PGID=1000 `#optional` \
  -e TZ=Etc/UTC `#optional` \
  -e SUBDOMAINS=subdomain1,subdomain2 \
  -e TOKEN=token \
  -e UPDATE_IP=ipv4 `#optional` \
  -e LOG_FILE=false `#optional` \
  -v /path/to/duckdns/config:/config `#optional` \
  --restart unless-stopped \
  lscr.io/linuxserver/duckdns:latest

注意:subdomains后面写的是自己申请到的域名,token是域名页面自动生成的。

如果是用其他域名,建议在openwrt中安装ddns插件,或者在容器中自行创建支持自己的域名的ddns容器;

如果是阿里域名,用阿里ddns,使用镜像 chenhw2/aliyun-ddns-cli:latest

4、内网搭建服务,我需要开放得服务是nextcloud,端口是8150;

这部分自行搭建,nextcloud搭建可以参考我得博文。

5、申请证书,任意linux虚拟机,debian/centos等均可,安装certbot工具,申请证书;

安装certbot

yum install epel-release
yum install certbot

申请证书。

certbot certonly --standalone -d pan.abc.com

6、容器中搭建nginx,将nextcloud服务https://192.168.199.100:8443代理到8444;

nginx的作用是代理,也就是把frp转发后的端口再做一次代理,代理到80/443端口,并且挂上证书。

证书路径:/mnt/user/appdata/nginx/conf/cert

这个证书是从linux中申请的,复制过来。

镜像名称:nginx:latest

修改nginx配置

cd /mnt/user/appdata/nginx

cat conf/conf.d/nextcloud.conf

server {
    listen 8180;
    server_name dytt.wjzmsj.com;
    rewrite ^(.*) https://$server_name:8444$1 permanent;
}

server {
    listen 8444 ssl;
    server_name dytt.wjzmsj.com;
    charset utf-8;

    ssl_certificate /etc/nginx/cert/dytt.wjzmsj.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/cert/dytt.wjzmsj.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;
    keepalive_timeout 70;

    index index.html index.php;
    root /html/dytt.wjzmsj.com;
    #charset koi8-r;
    #access_log logs/host.access.log main;
    location / { # ¨® V2Ray ???¦Ìpath ¡!ê??
        #proxy_redirect on ;
        proxy_pass https://192.168.199.100:8443;
        proxy_ssl_session_reuse off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        # Show real IP in v2ray access.log
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

7、路由器上通过端口映射开放内网服务8444到公网端口8444;

8、在nextcloud中设置新增的域名支持;

完成后即可通过访问 https://域名:8444来访问内网服务了。

赞(0)
未经允许不得转载:DongVPS » 内网服务穿透(中)|端口映射+ddns+nginx+实现免费https
分享到: 更多 (0)

评论 2

  1. #1

    请教一下,如果我有一个服务器,且服务器和nas都安装了tailscale,我怎么通过流量转发,让手机通过服务器的ip访问nas,感谢了

    匿名3个月前 (07-17)回复
    • 服务器设置成exit node

      imajeason3个月前 (07-18)回复