WireGuard本身就是一个可以组网的东西,之前我自己还写了个一键安装脚本来着,后来发现这货还支持IPv6,正好我本地没有IPv6,就想着看能不能用这个搞个隧道让本机也能用上IPv6。
能用是能用,但也有问题,全部搞完才发现TunSafe这玩意强制你必须配置一个IPv4才能正常连接,这样一来的话IPv6隧道的意义就不大了。。我是想本地的IPv4还是走本地网络,只有IPv6才走WireGuard,但是现在貌似不能这样。。。
蛋疼的一批,还是把过程记录一下吧。。其实和普通的配置没多大区别。。原理无非就是先通过WireGuard建一个虚拟局域网,然后在这个局域网内WireGuard会分配给我们一个内网的v4和v6。连接上之后再把流量转发到外网。
Debian9安装:
echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list apt -y update apt -y install linux-headers-$(uname -r) apt -y install openresolv apt -y install resolvconf apt -y install wireguard
CentOS7:
curl -Lo /etc/yum.repos.d/wireguard.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repo yum -y install epel-release yum -y install kernel-headers-$(uname -r) kernel-devel-$(uname -r) yum -y install wireguard-dkms wireguard-tools
开IPv4和v6的转发:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf sysctl -p
CentOS7要自己手动新建一个配置文件存放目录,Debian不需要:
mkdir -p /etc/wireguard
然后生成服务端的私钥/公钥
wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey
接着是客户端的私钥/公钥:
wg genkey | tee /etc/wireguard/clientprivatekey | wg pubkey > /etc/wireguard/clientpublickey
然后新建服务端的配置文件:
nano /etc/wireguard/wg0.conf
Debian9的配置如下:
[Interface] PrivateKey = 服务端私钥 Address = 192.168.0.1/24, 2001:20:2333::1/28 ListenPort = 23333 DNS = 8.8.8.8, 2001:4860:4860::8888 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens18 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens18 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ens18 -j MASQUERADE SaveConfig = true [Peer] PublicKey = 客户端公钥 AllowedIPs = 192.168.0.0/24, 2001:20:2333::1/28
因为WireGuard在配置文件内支持这种PostUp/PostDown的语法,所以我们可以直接把iptables的转发规则写在配置文件内,这样每次开机只要WireGuard运行都会自动加载iptables配置。
如果是CentOS7,配置文件就这样写:
[Interface] PrivateKey = 服务端私钥 Address = 192.168.0.1/24, 2001:20:2333::1/28 ListenPort = 23333 DNS = 8.8.8.8, 2001:4860:4860::8888 [Peer] PublicKey = 客户端公钥 AllowedIPs = 192.168.0.0/24, 2001:20:2333::1/28
然后我们自己用firewall做转发:
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 masquerade' firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i wg0 -o eth0 -j ACCEPT firewall-cmd --permanent --add-rich-rule='rule family=ipv6 source address=2001:20:2333::1/28 masquerade' firewall-cmd --permanent --direct --add-rule ipv6 filter FORWARD 0 -i wg0 -o eth0 -j ACCEPT firewall-cmd --permanent --add-port=23333/udp firewall-cmd --reload
属实无论是iptables还是firewalld这些防火墙真的难用的一批,我一般情况下,不是必须用到它的功能,我都是直接关闭的,或者自己装一个ufw。
还有我他妈前段时间在Proxmox上配防火墙把全端口封了(我把我自己强了),还好那机器有各种救援系统,登进去搞了几个小时算是恢复了,不然要出事。。。算了不扯这些没用的了。。
现在启动WireGuard:
wg-quick up wg0
没问题的话设置开机启动:
systemctl enable wg-quick@wg0
接下来就是客户端配置文件了,这个通用:
[Interface] PrivateKey = 客户端私钥 Address = 192.168.0.2/24, 2001:20:2333::666/28 DNS = 8.8.8.8, 2001:4860:4860::8888 [Peer] PublicKey = 服务端公钥 Endpoint = 服务端公网IP:23333 AllowedIPs = 0.0.0.0/0, ::0/0 PersistentKeepalive = 25
配置到TunSafe之后连接,你本地应该就可以用上服务器内的IPv6了,而且我发现走IPv6的流量没干扰,比如访问Google,用WireGuard走IPv4各种阻断,IPv6就畅通无阻。。。
烦躁的一批,想用个IPv6就这么难!还有那些公共的免费隧道,比如HE的那个,延迟太高了,没什么卵用。
LALA
我什么都不卖了,告辞!
最新评论
5211314
能不能教我 一点不会