Wireguard客户端在Windows的流量只有发送,没有接收,打开网页显示DNS解析错误,话不多说,直接上干货。
查看日志发现:
[TUN] [WG] Warning: the "Wi-Fi" interface has Forwarding/WeakHostSend enabled, which will cause routing loops
解决方法:
- 【管理员模式】运行PowerShell
- 输入
netsh interface ipv4 show interfaces
找到你连接网络的索引Idx,我使用无线网连接的,因此我的名称为WLAN,Idx为4
- 输入
netsh interface ipv4 show interface 4
(4换成你实际的Idx)
看到转发是开启的状态
- 输入
Set-NetIPInterface -ifindex 4 -Forwarding Disabled
(4换成你实际的Idx),关闭转发 - 再次输入
netsh interface ipv4 show interface 4
(4换成你实际的Idx),可以看到转发已经关闭
再次连接WireGuard,可以正常访问,接收与发送流量正常,问题解决~
但是重连之后又恢复成enable状态了,目前临时的解决方法是,重连后我们手动执行下写好的bat命令
@powershell "icm ([scriptblock]::Create((gc '%~f0' -Raw -Encoding UTF8)))"
Set-NetIPInterface -ifindex 4 -Forwarding Disabled
netsh interface ipv4 show interface 4
pause
# powershell script
注意,这个bat命令必须以管理员方式运行,但是每次都要右击选择管理员很麻烦,有什么方法直接双击就可以直接运行呢?当然有,我们右击这个bat,选择创建快捷方式,再右击快捷方式,选择属性->高级->用管理员身份运行
,当然,这个方法也是临时的。
问题反思:
- 当连接不上时,我首先看到的是网页DNS错误,于是下意识认为是DNS的问题,导致问题解决方向错误,应该首先查看日志,分析错误原因。
- 找到Warning日志后,在国内找不到解决方法,于是去Reddit搜寻,第一条就是解决方案,附链接:https://www.reddit.com/r/WireGuard/comments/t8cqyp/wireguard_client_not_working_on_windows_transfer/
Wireguard客户端在Windows的流量只有发送,没有接收,打开网页显示DNS解析错误,话不多说,直接上干货。查看日志发现:[TUN] [WG] Warning: the "Wi-Fi" interface has Forwarding/WeakHostSend enabled, which will cause routing loops解决方法:【管理员模式】运行PowerShell输入netsh interface ipv4 show interfaces找到你连接网络的索引I
./wireguard-ui
自动重启WireGuard守护程序
WireGuard-UI仅负责配置生成。 您可以使用systemd监视更改并重新启动服务。 以下是一个示例:
创建/etc/systemd/system/wgui.service
[Unit]
Description=Restart WireGuard
WireGuard本身是支持ipv6作为endpoint使用的,可是在生产环境应用它组网时,却出现了能够ping通对方主机,能够访问web服务器,但是无法传输大文件的奇怪问题。在这几天,我就该问题进行了深入分析,并终于找到了症结所在。
尝试将endpoint切换到ipv4时,一切正常,文件可以顺利传送。
由问题特点推断,是协议的改进使得原来的ipv4报文无法通过ipv6的包装顺利传送到对端。上网查找ipv6与ipv4的区别,并逐一排查。最后发现:ipv6取消了分片,在分组过大时会直接丢弃.
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
添加 iptables 规则,允许本机的 NAT 转换:
iptables
WireGuard是一款极其简单但快速的现代VPN,它利用了最先进的加密技术。它的目标是比IPsec更快、更简单、更精简、更有用,同时避免巨大的头痛。它打算比OpenVPN有更高的性能。WireGuard是一种通用VPN,可在嵌入式接口和超级计算机上运行,适用于多种不同的环境。它最初是为Linux内核发布的,现在是跨平台的(Windows、macOS、BSD、iOS、Android),并且可以广泛部署。它目前正在大力开发中,但已经被认为是业界最安全、最易使用、最简单的VPN解决方案
这是官方的解释,可以看出WireGuard具备以下几个特征
自组网,服务可控
平台兼容性好
wireguard搭建完成后,中继服务器与各个peer之间是可以互通,但是peer之间是放问不了的
需要通过中继服务器,开发iptables流量转发来实现peer之间的互通
iptables / ip6tables
# socat EXEC:./server.sh,pty,rawer TCP-LISTEN:12345,bind=192.168.128.1,fork,reuseaddr
./start-server.sh
export ENDPOINT= < ... >
export REMOTE_HOSTNAME=192.168.128.1
export REMOTE_PORT=12345
./client.sh
Websocket上的Wireguard( TODO )
安装websocat
cargo install --features=ssl websocat
如果将nginx用作websocat代理,请首先配置nginx。
websocat --udp-reuseaddr -E -
适用于Windows的Perimeter81 Wireguard Config Generator
如果客户选择使用Windows机器作为其Wireguard连接器,wireguard配置生成器将帮助构建所需的配置文件以方便导入,并且还将确保在Windows中启用了IP转发。 当前仅在Windows 10 1909上进行了测试
注意:此脚本需要Windows注册表访问权限才能启用IP转发(IPEnableRouter注册表项)。 需要重启
1.下载并安装适用于Windows的Wireguard
或在此存储库中使用随附的wireguard-installer.exe,但是它可能不是最新版本
2.从工作空间获取配置文件:
单击您的线卫隧道,转到“配置”
仅将https链接部分复制到剪贴板(“ curl -s”之后和“ | sudo bash”之前的所有内容)
将其粘贴到Web浏览器中
首先,您需要服务器的密钥对。 使用以下命令生成公用密钥和专用密钥:
# Generate privatekey
docker run --rm -i masipcat/wireguard-go wg genkey > privatekey
# Generate publickey from privatekey
docker run --rm -i masipcat/wireguard-go wg pubkey < privatekey> publickey
运行服务器
docker-compose.yaml
version : ' 3.3 '
services :
wireguard :
image : masipcat/wireguard-go:latest
cap_add :
- NET_ADMIN
1. 一个可用的 VPN 账号和密码。如果你没有,可以在网上购买或者免费试用。
2. 一个 VPN 客户端,比如 OpenVPN、WireGuard 等。你可以在网上下载安装包,也可以通过命令行安装(比如,在 Ubuntu 系统上使用 apt 命令安装)。
3. 一个 VPN 配置文件,通常是一个 .ovpn 文件。这个文件包含了连接到 VPN 服务器所需的所有信息。你可以从 VPN 服务商处获得这个文件,或者手动创建。
然后,你可以打开 VPN 客户端,导入 VPN 配置文件,输入 VPN 账号和密码,就可以连接到 VPN 了。
如果你使用的是命令行,可以这样做:
1. 安装 OpenVPN:
sudo apt update
sudo apt install openvpn
2. 下载 VPN 配置文件,比如:
wget https://example.com/client.ovpn
3. 连接 VPN:
sudo openvpn --config client.ovpn --auth-user-pass
在弹出的对话框中输入 VPN 账号和密码即可。
希望这个回答对你有帮助!
【2022最新】yum -y install nginx nothing to do (装epel-release也没用的原因)
地狱与天堂:
Windows Wireguard 流量无法接收
Leopold Fitz 7: