wireguard和iptables都是内核级的软件,理论上性能会高于frp(没对比过实际的性能表现),感兴趣的可以试一试
本文将以debian12作为演示
1.在客户端和服务端上均安装WireGuard和配置wg密钥
1 | apt install wireguard -y |
会在当前目录生成,publickey
是公钥,privatekey
是私钥
什么?你问windows怎么办,windows对wireguard没有内核级别的支持,还是老实用frp吧
2.配置服务端wireguard
首先服务的需要有一个udp端口用于wireguard的通信,记得开启端口,本文以10001端口示例
1 | iptables -I INPUT -p UDP --dport 10001 -j ACCEPT |
接着配置服务端的wg配置文件
在 /etc/wireguard
目录下新建一个名为 <隧道名>.conf
的文件:
1 | [Interface] |
接着使用 wg-quick up <隧道名>
启动隧道
3.配置客户端wireguard
在 /etc/wireguard
目录下新建一个名为 <隧道名>.conf
的文件:
1 | [Interface] |
接着使用 wg-quick up <隧道名>
启动隧道
确保客户端和服务端的隧道都正常启动后,使用ping检查隧道联通性,客户端和服务端互相ping对方的隧道ip,例如本文中服务端的隧道ip是10.0.100.1,客户端的隧道ip为10.0.100.2,如果能ping通,进行接下来的操作
配置服务端iptables实现端口转发
开启ip转发
1 | echo "net.ipv4.ip\_forward=1" >> /etc/sysctl.conf |
配置NAT端口转发
1 | iptables -t nat -A PREROUTING -p tcp --dport <服务端对外端口> -j DNAT --to-destination <客户端隧道ip:客户端要转发的端口号> |
在iptables放行转发的端口
1 | iptables -I INPUT -p tcp --dport 8888 -j ACCEPT |
接下来一切顺利的话,内网穿透完成,按照本文的示例配置访问服务端的8888端口将转发到客户端的80端口
使用WireGuard+Iptables实现高性能内网穿透
http://example.com/post/wireguard-nat/Author
lingxh
Published at
2023-06-23
License
CC BY-NC-SA 4.0