wireguard 是一款新颖、简单、快速的vpn,所谓点对点通讯的vpn。
它的特点是:
采用最新的加密技术
- 对称加密采用 ChaCha20 ,身份认证采用 Poly1305, 采用 RFC7539 AEAD 头数据构造
- 密钥交换协议采用 椭圆曲线 Curve25519
- 哈希表采用 BLAKE2s (RFC7693)
- 密钥签名采用 SipHash24
- 密钥生成采用HKDF ( RFC5869)
总而言之,多年不做加密,我这个曾经入选国家保密专家委员会候选人的博士,已经成为“砖家”了。
- 采用非对称加密方式交换数据。
- 跨平台
- 速度极快
- 直接运行在linux内核,因此性能优于openVPN等应用层的vpn。
- 采用点对点认证,udp无状态通讯。如果没有通讯,客户端和服务器都保持静默。如果客户端发出的数据不对,服务器直接丢弃,并不给予任何回应。
为了在linux上配置wireguard,需要独立服务器或者kvm虚拟机。openVS不行,因为wireguard要进入内核,而openVS共享内核,所以无法获得操作权限。
KVM略微贵一点,大概一年20美元可以搞定。考虑到我加一次油也不止20美元,所以这点钱还是值得的。当然,如果你有独立服务器,就可以随便折腾。声明一句,最好买哪种可以无限次数安装系统的vps,否则很容易把系统折腾死。
以下默认root 权限。
安装
add-apt-repository ppa:wireguard/wireguard apt-get update apt-get install wireguard-dkms wireguard-tools linux-headers-$(uname -r)
生成服务器和客户端密钥
cd /etc/wireguard/ umask 077 wg genkey | tee server_private_key | wg pubkey > server_public_key wg genkey | tee client_private_key | wg pubkey > client_public_key
创建服务器端配置文件
在 /etc/wireguard/ 下创建wg0.conf文件。[Interface] Address = 10.200.200.1/24 SaveConfig = true PrivateKey = 服务器的私钥 ListenPort = 51820 [Peer] PublicKey = 客户端的公钥 AllowedIPs = 10.200.200.2/32
wg0.conf对应一个叫wg0的虚拟网卡。
AllowedIPs = 10.200.200.2/32 指定客户端用这个地址,附加公钥认证通过的客户才可以通讯。
ListenPort = 51820 是服务器端的监听端口,可以修改为别的端口。有人甚至写了一个脚本,随机改变端口,避免端口扫描程序识别wireguard通讯。客户端配置文件
如果客户端是Linux,配置方式基本和服务器一样。采用windows客户的人,可以下载tunsafe客户端。这个客户端是曾经开发μTorrent的ludde,为了tunsafe不开源的问题,他与wireguard的开发者有过好一番争执。不过最近,tunsafe已经开源了,在git上。
Anyway,下载tunsafe, 安装虚拟网卡。运行界面如下:
点击
edit config
,配置客户端:[Interface] Address = 10.200.200.2/32 PrivateKey = 客户端的私钥 DNS = 10.200.200.1 [Peer] PublicKey = 服务器的公钥 Endpoint = 服务器的物理ip地址:51820 AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 21
说明,客户端和服务器端主要的差别在于,客户端的PrivateKey对应服务器端[peer]的PublicKey,服务器端的私钥则对应客户端的[peer]里的公钥。
Endpoint = 服务器的物理ip:51820 要用vps实际的ip和端口替换。
AllowedIPs = 0.0.0.0/0 表示所有通讯都通过vpn转发。启动虚拟网卡wg0
chown -v root:root /etc/wireguard/wg0.conf chmod -v 600 /etc/wireguard/wg0.conf wg-quick up wg0 systemctl enable [email protected]
允许ip转发
修改/etc/sysctl.conf,取消注释net.ipv4.ip_forward=1
然后,重启系统或者直接用如下操作:
sysctl -p echo 1 > /proc/sys/net/ipv4/ip_forward
修改防火墙规则
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -p udp -m udp --dport 51820 -m conntrack --ctstate NEW -j ACCEPT iptables -A INPUT -s 10.200.200.0/24 -p tcp -m tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT iptables -A INPUT -s 10.200.200.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT iptables -A FORWARD -i wg0 -o wg0 -m conntrack --ctstate NEW -j ACCEPT iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o eth0 -j MASQUERADE
将规则保存起来:
apt-get install iptables-persistent systemctl enable netfilter-persistent netfilter-persistent save
配置dns服务器。
最近有研究指出,中国移动大概屏蔽了40%的dns请求。如果使用公共dns,显然面临投毒、插入广告、被指向钓鱼网站等风险。即使什么风险也没有,dns泄漏也会暴露你的ip,让你的匿名性受到损害。
所以,最好在vps上配置dns服务器,让所有通过wireguard的dns查询请求,都隐藏在vps后面。下面是安装unbound服务器的简单方式:
apt-get install unbound unbound-host curl -o /var/lib/unbound/root.hints https://www.internic.net/domain/named.cache
安装unbound和根服务器缓存。
配置/etc/unbound/unbound.conf
server:
num-threads: 4
#允许日志
verbosity: 1
#根服务器列表
root-hints: "/var/lib/unbound/root.hints"
#DNSSEC的根密钥文件
auto-trust-anchor-file: "/var/lib/unbound/root.key"
#允许查询任意网站的dns
interface: 0.0.0.0
max-udp-size: 3072
#仅允许本机和10.200.200.0/24段ip访问
access-control: 0.0.0.0/0 refuse
access-control: 127.0.0.1 allow
access-control: 10.200.200.0/24 allow
#不进入公共dns服务器列表
private-address: 10.200.200.0/24
#隐藏信息
hide-identity: yes
hide-version: yes
#强制DNSSEC
harden-glue: yes
harden-dnssec-stripped: yes
harden-referral-path: yes
#Add an unwanted reply threshold to clean the cache and avoid when possible a DNS Poisoning
unwanted-reply-threshold: 10000000
#验证地址,记录dns投毒事件(Have the validator print validation failures to the log.)
val-log-level: 1
#Minimum lifetime of cache entries in seconds
cache-min-ttl: 1800
#Maximum lifetime of cached entries
cache-max-ttl: 14400
prefetch: yes
prefetch-key: yes
配置服务。
chown -R unbound:unbound /var/lib/unbound
systemctl enable unbound
好了,启动服务器。
然后联通客户端。如果配置不错,应该可以上网了。
有问题请留言。
博主辛苦了!谢谢分享!👍
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
谢谢分享,终于成了
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit