科学上网指南(10)——wireguard
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/32wg0.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 wg-quick@wg0.service允许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
好了,启动服务器。
然后联通客户端。如果配置不错,应该可以上网了。
有问题请留言。Leave 科学上网指南(10)——wireguard to:
Read more #cn posts
Best Posts From causenet
We have not curated any of causenet's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From causenet
- 事工哲学(41)|空空的佩剑
- 服务器更新
- 上课之难——youtube-dl
- 事工哲学(40)|辅导的节制
- 书籍还是视频翻译?
- 和合本翻译研究|底本与背景资料
- 和合本翻译研究|使徒行传26:23——“首先”?
- 事工哲学(37)|讲台的节制
- 和合本翻译研究|名词的词性和数量
- 事工哲学(36)|Doing and Being
- 事工哲学(35)|世界读书日之“江边明月为君留”
- 事工哲学(31)|Empower or Make Them Powerless
- 带领者的权柄|麦克阿瑟牧师谈希伯来书13:17
- 平衡的讲道(8-2)|用不熟悉的经文讲道
- 平衡的讲道(8-1)|选择熟悉经文讲道
- Broken Trust(暂译:信任崩塌)|前言
- 不要跟清教徒学英语(10)|代词之不知,吾未见其明
- Mr. Robot和Counterpart
- 计算机辅助翻译(CAT)与机器翻译(MT)