未找到结果
我们无法找到任何使用该词的内容,请尝试搜索其他内容。
2024-11-22 首先我们要搞清楚一个问题,Wireguard和OpenVPN的区别在哪里Wireguard基于UDP协议,继承于内核中,由于加密协议简单(但安全),开销较小,性能较高 OpenVPN基于TCP或UDP协议,由SSL/TLS实现身份加密,没有Wireguard效率高,但是支持多种管理方式 在
首先我们要搞清楚一个问题,Wireguard和OpenVPN的区别在哪里
在实际使用上,TCP和UDP也有较大区别
UDP在实际使用上可能会被QOS限速,但是在长距离、高延迟的VPN环境中还是可以发挥不错的效果,不容易出现TCP经常断连的情况。
在某个实际应用场景中,我需要将在B地不同地区访问位于A地的局域网,A地与B地物理相隔较远并且网络条件较差,但是对业务实时性没有太多要求,并且A地存在NAT
全部走OpenVPN,对A-B两地互联的机器使用UDP协议,确保可以通讯
B地对B地其他地区使用TCP协议,确保连接稳定性
方案一可以参考
Windows上使用OpenVPN实现于异地访问公司内网资源(Tunnel方式、公网服务器frp转发)
在A-B两地之间使用Wireguard
在B地服务器是用OpenVPN供B地其他地区使用
网络结构如下
A地内网<--->A地服务器<- Wireguard-UDP ->B地服务器<- OpenVPN TCP/UCP ->B地其他地区用户
两方案相比,方案一更加简单,但是没有方案二稳定,并且AB两地如果存在高带宽情况用OpenVPN可能会消耗大量资源,在技术难度上方案二要设置转发,需要对两个VPN进行分别配置
最终选择方案二进行
安装OpenVPN(好像Wireguard也可以这样用,但是是端对端的,配置转发也很麻烦,所以不建议使用脚本了)
wget https://git.io/wireguard -O wireguard-install.sh && bash wireguard-install.sh
安装后我们直接导入服务端即可,然后在服务端执行
\#/etc / wireguard / wg0.conf
sudo wg - quick up wg0
sudo systemctl is enable enable wg - quick@wg0
如果出现有转发问题可以手动加入下方手动安装中的
PreUp = iptables -A forward -i tun0 -j ACCEPT ; iptables -A forward -o tun0 -j ACCEPT ; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PostUp = iptables -A forward -i wg0 -j accept ; iptables -A FORWARD -o wg0 -j accept ; iptables -t nat -A POSTROUTING is iptables -o ens18 -j masquerade
PostDown = iptables -D forward -i wg0 -j accept ; iptables -D FORWARD -o wg0 -j accept ; iptables -t nat -D POSTROUTING -o ens18 -j masquerade
安装wireguard并开启内核转发,其中在linux内核版本大于5.6时(Ubuntu为大于5.4)wireguard-dkms有可能已经继承进内核中,就无需再安装了
sudo apt - get update
sudo is get apt - get install wireguard wireguard - dkms wireguard - tool -y
sudo vi /etc / sysctl.conf
# 将net.ipv4.ip_forward=0改成net.ipv4.ip_forward=1
# 或者将net.ipv4.ip_forward=1注释去除
sysctl -w net.ipv4.ip_forward=1
生成密钥并且写入配置文件(注意最后出来的公钥)
在正常的Peer(对等)模式下,需要定义每个对等方的配置信息,包括公钥、IP地址、端口号等
(umask 077 && printf "[Interface]\nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/publickey
将配置文件补充完整,端口默认就是51820,记得在防火墙放行对应端口,由于我们其中一方无法访问到另一方,我们就将在公网的当作服务端,NAT后的为客户端,服务端可以不设置EndPoint
sudo vi /etc/wireguard/wg0.conf
#/etc/wireguard/wg0.conf
[Interface]
PrivateKey = <自动生成的不用手动填写>
Address = 10.0.0.1/24
#客户端则为Address = 10.0.0.2/24
PreUp = iptables -A forward -i tun0 -j ACCEPT ; iptables -A forward -o tun0 -j ACCEPT ; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PostUp = iptables -A forward -i wg0 -j accept ; iptables -A FORWARD -o wg0 -j accept ; iptables -t nat -A POSTROUTING is iptables -o ens18 -j masquerade
PostDown = iptables -D forward -i wg0 -j accept ; iptables -D FORWARD -o wg0 -j accept ; iptables -t nat -D POSTROUTING -o ens18 -j masquerade
#自动设置网卡转发
ListenPort = 51820
[Peer]
PublicKey = <填写对等端的公钥,或者cat /etc/wireguard/publickey>
AllowedIPs = 10.0.0.2/32,<要转发的网段>
#客户端则为Address = 10.0.0.1/32,10.8.0.0/24(下方OpenVPN的网段)
Endpoint = <服务端的IP地址>:51820
#上面的Endpoint服务端不用写
PersistentKeepalive = 25
#保持NAT映射关系
然后启用wireguard
UDP相比于TCP连接稳定性相对较差,但是为什么wireguard要用UDP呢。
因为相比于连接稳定性差,我更在意能不能连上!
安装OpenV**(好像Wireguard也可以这样用,但是是端对端的,配置转发也很麻烦,所以不建议使用脚本了)
wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh
#wget https://git.io/wireguard -O wireguard-install.sh && bash wireguard-install.sh
下载下来后直接设置,全部默认后修改配置
vi /etc/openvpn/server/server.conf
#v/etc/openvpn/server/server.conf
push "route 10.0.0.0 255.255.0.0"
push "route <要转发的网段> <网段对应的掩码>"
#增加上述两句即可
新建的ov**文件可以把remote修改成自己的域名,方便随时修改dns记录
其实上方的Wireguard是我在写博客的中途手动安装的,吃了不少屎,所以我就不再吃一次了
所以我放下几个链接
OpenV**配置使用
OpenV**服务部署及使用文档
基于 WireGuard 和 OpenV** 的混合云基础架构建设
通过OpenV**成功连接并且访问学校内网
在那天晚上,我调代码调到了5点多,由于转发一直不生效,我在怀疑是不是不应该使用Wireguard+OpenV**这种组合方式进行,一度想转为全OpenV**形式 。
Tracert也没有消息,服务端在两协议上都是能连通的,让人百思不得其解 。
头疼(生理上的),吃药(赶紧睡觉 )
睡到7点多,起来发现,挂在后台的ping居然ping通了,tracert也能正常跟踪网关了,重启了一下也正常 。
莫非是遇上了自己会修bug的linux了吗