如何快速、便捷的设置反向代理,并自动申请证书

1. 准备条件:

  • 有一个自己域名,并完成DNS(以cloudflare为例)
  • 有一台含公网ip的服务器,安装好docker compose环境

网络概览图

2.npm部署的一个典型compose文件

compose.yml:

services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    restart: always
    container_name: npm
    ports:
      - 443:443
      - 81:81
    volumes:
      - ./npm/data:/data 
      - ./npm/letsencrypt:/etc/letsencrypt  

# admin@example.com  changeme

  nps:
    image: ffdfgdfg/nps
    container_name: nps
    restart: always
    ports:
      - 8024:8024
      - 8080:8080
      - 9001-9005:9001-9005             
    volumes:
      - ./nps/conf:/conf

#  admin 123

3.别忘了开放端口:

sudo firewall-cmd \
 --add-port=22/tcp \
 --add-port=81/tcp \
 --add-port=443/tcp \
 --add-port=8080/tcp \
 --add-port=8024/tcp \
 --add-port=9001/tcp \
 --permanent
sudo firewall-cmd --reload

sudo firewall-cmd --zone=public --list-ports

4.到cloud flare进行DNS

nps

npm

ikuai

5. 到Cloud flare申请token

6. NPM界面操作

  • 申请证书
  • 配置代理

7.此时发现有些端口不用暴露到外网,那么进行删除

sudo firewall-cmd --zone=public --remove-port=81/tcp --remove-port=8080/tcp --remove-port=9001/tcp --permanent
sudo firewall-cmd --reload

8.NPC也进行了compose文件改造

如果上期视频使用命令运行起来的话,可以不用管,也可以像我一样改造,使用compose运行,但是记得要删除之前运行的容器

services:
  npc:
    image: ffdfgdfg/npc
    container_name: npc
    command: -server=nps.mjvlog.top:8024 -vkey=g4x0yw778uomt6n8
    network_mode: host
    restart: always

9. 查看加了证书访问网站的效果

有了证书,浏览网页就显示安全的,那么我们的账号密码就可以加密传输,不会暴露了

10.新的问题

我有很多内网服务,压根儿就不想暴露在公网,也没有必要,甚至不推荐暴露在公网,比如esxi,比如这个路由器页面我就不想暴露,那有没有一种更安全的方法,不但使用证书加密,而且加入MFA验证,登录一个页面后,就可以无缝访问家里的Linux ,WINDOWS服务器,路由器,各种web页面,下期视频给大家介绍,敬请期待

如何在无公网ip的情况下,配置内网穿透,访问内网主机

前提条件

  1. 有个域名(内网穿透功能非必须,若将来申请证书,则必须)
  2. 有个服务器,该服务器有公网ip (必须,通过该服务器中转)

教程开始

  1. 首先到cloudflare,将域名解析至远端服务器(有公网ip的服务器)
  2. 清除默认iptables规则
sudo -i
iptables -vnL
iptables -F
iptables-save > /etc/iptables/rules.v4 
  1. 安装firewalld
sudo apt update
sudo apt install -y firewalld
sudo  firewall-cmd --add-port=22/tcp --add-port=8080/tcp --add-port=8024/tcp --add-port=9001/tcp --add-port=443/tcp --permanent
sudo firewall-cmd --reload
  1. 下载conf,传到服务器

https://github.com/ehang-io/nps/archive/refs/tags/v0.26.10.zip

  1. 安装docker环境(看上期视频/日志)
  2. 运行服务端nps容器,(注意conf路径):
docker run -d --name nps --net=host --restart=always -v /home/ubuntu/nps/conf:/conf ffdfgdfg/nps
  1. 运行客户端npc容器:
docker run -d --name npc --net=host --restart=always ffdfgdfg/npc -server=nps.mjvlog.top:8024 -vkey=g4x0yw778uomt6n8

  1. 使用电脑,链接手机热点登录
  2. 使用手机流量登录

补充说明

  1. 可以看到浏览器上写的不安全,说明我们现在使用的是http方式,密码会暴露在公网,确实不够安全,下一期视频教大家如何通过反向代理和申请ssl证书,解决浏览器提示“不安全”的问题
  2. 公网服务器的选择,国内还是国外?

国内:穿透速度快, 缺点:使用域名 80,443端口,需要备案

国外:穿透速度比国内慢,速度取决于服务商,无需备案,并且还能搭建其他更好用的应用

如何安装docker、docker compose环境

视频教程:

官网:

Ubuntu:

https://docs.docker.com/engine/install/ubuntu

Centos:

https://docs.docker.com/engine/install/centos

以及其他系统:

以Ubuntu系统为例:

1.卸载旧版、可能冲突的、非官方软件包:

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

2.清除默认iptables规则

sudo -i
iptables -vnL
iptables -F
iptables-save > /etc/iptables/rules.v4 

3.安装firewalld

sudo apt update
sudo apt install -y firewalld
sudo  firewall-cmd --add-port=22/tcp --add-port=443/tcp --add-port=62345/tcp --add-port=62345/udp  --permanent
sudo firewall-cmd --reload

2.设置apt仓库

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

3.安装最新版本docker/docker compose

sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4.验证安装成功

sudo docker run hello-world

5. 设置免sudo使用docker命令

sudo groupadd docker          #添加docker用户组
sudo gpasswd -a $USER docker  #将当前用户添加至docker用户组
sudo newgrp docker            #更新docker用户组