聊聊网络穿透

目前网络穿透的主要方式主要有DDNS,Frp,ZeroTier,WireGuard,NetBird,OpenVPN,花生壳几种方式。

一、DDNS(动态域名解析)

1. 前提条件

  • 公网ip(动态的)(满足其一即可)

  • 网络支持ipv6(满足其一即可)

2. 主要原理

通过内网的工具定时获取当前环境的外网ip,然后通过域名绑定这个ip,从而达到无论ip怎么变化,访问这个域名都是访问内部网络的目的。

不同的DDNS工具只是功能略不相同

  • 支持不同的域名提供商

  • 绑定变化消息通知

  • ......

3. 优缺点

优点:

  • 不需要公网ip

缺点:

  • 内部网络需要公网ip或者ipv6

  • 访问的时候需要域名+端口的形式

  • 路由器也需要将端口映射打开

4. 参考资料

NewFuture/DDNS:https://github.com/NewFuture/DDNS

jeessy2/ddns-go:https://github.com/jeessy2/ddns-go

二、Frp

1. 前提条件

  • 拥有一台有公网ip的服务器

2. 主要原理

frp分为服务端和客户端

  • 服务端:启用一个隧道,供其他客户端保持长连接

  • 客户端:启用一个隧道,与服务端保持长连接

服务端配置一个port和客户端的ip:port建立长连接,访问服务端ip:port的时候,就相当于访问了客户端对应的ip:port

3. 优缺点

优点:

  • 支持 P2P 通信,流量不经过服务器中转,充分利用带宽资源

  • 服务端和客户端都有界面,功能有限,主要通过配置文件方式

  • 访问的时候就和访问服务器一样

  • 可以设置ssl证书

  • 监控调用次数

缺点:

  • 需要一个公网ip服务器

  • 每次有新服务,都需要安装客户端,需要修改配置

4.参考资料

官网:https://gofrp.org/

fatedier/frp:https://github.com/fatedier/frp

三、ZeroTier

1. 前提条件

  • 申请一个ZeroTier账号就可以了

  • 一台有公网ip的服务器,可以新增一个moon服务,加快访问速度(非必须)

2. 基本原理

3.搭建步骤

4. 参考资料

四、WireGuard

1. 前提条件

  • 该环境拥有公网ip

2. 安装步骤

(1)启动服务

version: '3.7'
services:
  wgeasy:
    image: weejewel/wg-easy:7
    environment:
      WG_POST_UP: 'iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -j MASQUERADE; iptables -A FORWARD -o %i -j ACCEPT'
      WG_POST_DOWN: 'iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -j MASQUERADE; iptables -D FORWARD -o %i -j ACCEPT'
      WG_DEFAULT_ADDRESS: 192.168.3.x
      PASSWORD: xxxx
      WG_HOST: xxxx
      WG_ALLOWED_IPS: 0.0.0.0/0
      WG_PERSISTENT_KEEPALIVE: 30
      WG_DEFAULT_DNS: 114.114.114.114
    volumes:
      - ./data:/etc/wireguard
    networks:
      - wg
    ports:
      - 51821:51821/tcp
      - 51820:51820/udp
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv4.ip_forward=1
networks:
  wg:

WG_DEFAULT_ADDRESS:可以使用和路由器一样的ip端,wg分配ip之后,修改为和内网一样的ip,这样就不用单独记住分配的ip了

PASSWORD:设置一个页面访问的ip

WG_HOST:公网ip或者域名

(2)新增客户端配置

第四步可以看WG_DEFAULT_ADDRESS配置

(3)客户端导入配置

客户端下载:https://www.wireguard.com/install/

3.参考资料

https://gitee.com/spoto/wireguard

https://www.bilibili.com/video/BV1uT411w7Tq/?share_source=copy_web&vd_source=6a26137f20e75c9cf5ddea84ac0f0919

五、OpenVPN(内网穿透)

1. 前提条件

  • 该环境拥有公网ip

2. 安装步骤(docker)

(1)设置环境变量

OVPN_DATA=/home/admin/OpenVPN

(2)创建配置

docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://你的域名或者ip地址

{你的域名或者ip地址}:主要是后续生成证书里面的那个地址

(3)初始化配置

docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki

初始化过程中要输入证书创建的密码,用于后续给别人生成证书时候的认证

(4)启用服务端

docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn

记得开放服务器的1194端口udp防火墙

(5)生成证书

docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full 证书名字 nopass

(6)导出证书

docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient 证书名字 > 证书名字.ovpn

(7)客户端导入证书即可使用

客户端下载链接:https://openvpn.net/client/

3. 优缺点

优点:

  • 安全

  • 安全

  • 还是安全

  • 不同人员申请不同的证书

缺点:

  • 流程复杂

4. 参考资料

docker镜像:https://hub.docker.com/r/kylemanna/openvpn/

六、OpenVPN(科学上网)

1. 前提条件

  • 拥有科学访问的vps

2. 安装步骤

(1)安装服务端

使用root账户安装,按照默认选项即可(默认选项不用输入,直接回车就行)

wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh

安装之后的配置文件在/root/client.ovpn,直接下载下来导入客户端就行

(2)安装客户端

下载地址:https://openvpn.net/client/

3. 优缺点

优点:

  • 安全

缺点:

  • 节点单一,容易被封

4. 参考资料

安装步骤:https://www.youtube.com/watch?v=o8vbT6siiDU

七、NetBird

1. 前提条件

  • 如果搭建自托管服务,需要至少1c2g的云主机

2. 基本原理

参考ZeroTier

3. 优缺点

优点:

  • 建立在原生 WireGuard® 之上

  • 新节点只需要启动即可,不需要任何配置工作

缺点:

  • 不使用自建服务,服务器在国外,慢

  • 使用自建服务,性能消耗较大,会占用80和443端口(应该可以改)

参考资料

官方文档:https://docs.netbird.io/selfhosted/selfhosted-quickstart

搭建步骤:https://www.bilibili.com/video/BV1Aw411F7KA/?share_source=copy_web&vd_source=6a26137f20e75c9cf5ddea84ac0f0919

常见错误:https://www.bilibili.com/read/cv27338555/?spm_id_from=333.999.0.0