Closed kwxiaozhu closed 2 years ago
内核监听的端口没有办法远程打开reuse port,使用防火墙的DNAT或natmap的应用层转发。
或者试试先跑natmap打洞,然后再启动wireguard。
或者试试先跑natmap打洞,然后再启动wireguard。
不行,先打洞,再启动wireguard提示端口占用,启动不了,只能试试用户态的wireguard-go看看吧,再不行就只能用转发了
很好用的软件,我现在用的笨办法,通过调用脚本把IP和端口发到远程服务器,访问远程服务器获取IP和端口,再配置到应用里面,如果能有更好的办法就好了。
或者试试先跑natmap打洞,然后再启动wireguard。
不行,先打洞,再启动wireguard提示端口占用,启动不了,只能试试用户态的wireguard-go看看吧,再不行就只能用转发了
优先用防火墙的端口转发(DNAT),几乎是零开销的,实在不行再用应用层转发。
很好用的软件,我现在用的笨办法,通过调用脚本把IP和端口发到远程服务器,访问远程服务器获取IP和端口,再配置到应用里面,如果能有更好的办法就好了。
我是使用域名通过DNS分发IP和端口的,脚本参数[3]给出了IP4P的值,在脚本中写到域名的AAAA记录里。客户端侧试试修改代码增加IP4P的支持(可参考 [1])。或者写个脚本启动器先解析域名得到AAAA地址再转换为IPv4和端口,启动客户端。
[1] https://github.com/heiher/hev-fsh/blob/master/src/hev-fsh-config.c#L433-L444
或者试试先跑natmap打洞,然后再启动wireguard。
不行,先打洞,再启动wireguard提示端口占用,启动不了,只能试试用户态的wireguard-go看看吧,再不行就只能用转发了
优先用防火墙的端口转发(DNAT),几乎是零开销的,实在不行再用应用层转发。
很好用的软件,我现在用的笨办法,通过调用脚本把IP和端口发到远程服务器,访问远程服务器获取IP和端口,再配置到应用里面,如果能有更好的办法就好了。
我是使用域名通过DNS分发IP和端口的,脚本参数[3]给出了IP4P的值,在脚本中写到域名的AAAA记录里。客户端侧试试修改代码增加IP4P的支持(可参考 [1])。或者写个脚本启动器先解析域名得到AAAA地址再转换为IPv4和端口,启动客户端。
[1] https://github.com/heiher/hev-fsh/blob/master/src/hev-fsh-config.c#L433-L444
谢谢回复,我现在在用手机端的wireguard客户端,暂时没有能力修改代码或写个前置的启动器解析域名获取IP和端口,先暂时这样用了,试用这几天只要PPPOE不断开重新拨号,IP和端口基本是固定的,设置一次可以用个几天
增加了IP4P地址格式支持的WireGuard Android客户端: https://github.com/heiher/wireguard-android/releases
在natmap的脚本中将UDP映射后的IP4P地址更新到DDNS域名的AAAA记录中后,使用这个WireGuard Android客户端,Peer地址写为 domain:0
增加了IP4P地址格式支持的WireGuard Android客户端: https://github.com/heiher/wireguard-android/releases
在natmap的脚本中将UDP映射后的IP4P地址更新到DDNS域名的AAAA记录中后,使用这个WireGuard Android客户端,Peer地址写为
domain:0
太6了!不过似乎有点小BUG,填写解析IP4P的DDNS域名:0 后,貌似解析的端口出错了,IPv4地址解析正确,端口解析为-48了,另外是否可以支持直接输入IP4P地址,方便调试,谢谢大佬!!!
哈哈,Java不合格,我改一下,把byte当成unsigned了。 :face_with_spiral_eyes:
经过测试完全正常使用,感谢大佬极速的响应,这个工具又多了一个实用的方案👍因为无法打洞wireguard内核监听的端口,也就没法直接在软路由上部署wireguard,所以目前的方案是用pve开了个小虚拟机上跑wireguard设置好防火墙,再在软路由上用natmap打洞转发,测试正常,再次感谢大佬👍👍
感觉有更简便的方法:
方法一:软路由上端口50001跑内核监听的wireguard,端口50002跑natmap打洞(绑定模式),软路由上配置防火墙端口转发,把wan口上目的端口50002转至软路由lan口ip的50001。
方法二:软路由上端口50001跑内核监听的wireguard,端口50002跑natmap打洞(转发模式),并通过参数 -t 127.0.0.1 -p 50001,应用层转发。
方法一开销比方法二小,方法二不用配防火墙灵活。
确实,没想到这个办法,试试方法一,之前设置防火墙DNAT转发没成功,目前用的都是natmap应用层转发,再找找原因,感谢
发现一个尴尬的问题,我的目标是在任何有外网的环境下通过wireguard连回家,但是有些路由器的DNS服务器不支持解析AAAA记录,也就是说不能解析IP4P的域名了,并且一般支持解析IPV6域名的一般都支持IPV6通信,这样我不如直接用IPV6连接了。要解决可能需要直接查询支持AAAA的DNS服务器,不用系统默认DNS ,我看了您魔改的Wireguard客户端,要实现可能稍微有点麻烦,https://github.com/heiher/wireguard-android/blob/b14d7d9557cdd8a029a3419d5b2a4d50a77fdb6f/tunnel/src/main/java/com/wireguard/config/InetEndpoint.java#L100
final InetAddress[] candidates = InetAddress.getAllByName(host);
这里不用系统默认DNS解析,改成内置固定支持AAAA解析的DNS服务器解析,我不会JAVA,不知道实现起来麻烦不。
什么DNS不支持解析AAAA记录?我这无IPv6的环境也可以正常使用的,技术原理上解析AAAA记录也没有要求系统必须配置了IPv6。
是的,一些比较老的不支持IPV6的路由器,用路由器默认DNS比如192.168.1.1之类的,nslookup 解析不到AAAA的记录,我明天再找环境试试,刚才试了邻居的网络TL-WR886N路由器,不支持IPV6,DNS解析不到AAAA记录,可能环境比较小众,我再测试看看吧
好的,看看有没有自定义DNS的方法。目前明确公共DNS,比如114.114.114.114、223.5.5.5、8.8.8.8都是支持的。
可以了,刚才可能是手机有问题,VPN关掉重新打开可以了,可能是刚才连接失败后VPN的状态一直没变过来。不过确实有些路由器的DNS不支持解析AAAA,比如DNSMASQ就可以设置丢弃IPv6的解析记录,如果能自定义DNS就更好了,环境比较小众,如果麻烦就不用费劲了,感谢
运营商的4G、5G网络的DNS肯定是支持的;如果WIFI网络遇到不支持的,不如改一下网络连接里的DNS地址简单一些。
是的,我也发现了,如果用WiFi连不上,就切到流量连接后再开启WiFi就行了,这样更简单
哈哈,机智~
N2N 用户态的程序监听的udp端口可以用natmap打洞成功,但是wireguard内核监听的端口打洞失败。 看报错似乎是hev_reuse_port 失败