聊聊网络穿透
目前网络穿透的主要方式主要有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.参考资料
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
五、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/read/cv27338555/?spm_id_from=333.999.0.0