heiher / natmap

TCP/UDP port mapping for full cone NAT
MIT License
1.38k stars 103 forks source link

在开启clash的服务器上,无法打洞 #62

Closed cshijiel closed 6 months ago

cshijiel commented 6 months ago

./natmap -i eno1 -s stunserver.stunprotocol.org -h qq.com -t 192.168.31.3 -p 8096

[E] hev_sock_client_tcp src/hev-sock.c:173 Operation in progress [E] tnsk_run src/hev-tnsk.c:105 Start TCP keep-alive service failed.

关闭clash后可以打洞

如何让这两者共存呢?

heiher commented 6 months ago

这应该是需要让防火墙或策略路由中的Clash规则排除掉NATMap要访问的STUN和HTTP服务器地址。

我将会给NATMap增加一个参数用于指定fwmark,以便于在防火墙和策略路由中对NATMap发出的报文进行匹配。

heiher commented 6 months ago

FwMark: https://github.com/heiher/natmap/releases/tag/20240519-next

可以通过-f <mark>参数指定fwmark,fwmark会作用于STUN/HTTP的对外访问。如果系统环境配置了策略路由或基于防火墙的透明代理,可在较早阶段通过匹配fwmark跳出。比如:

natmap -s stunserver.stunprotocol.org -h qq.com -f 0x123

# IPTables
iptables -t mangle -I OUTPUT -m mark --mark 0x123 -j RETURN

# Policy-routing
ip rule add fwmark 0x123 table main pref 1
ysc3839 commented 6 months ago

@heiher -f 参数值不带 0x,却是16进制,并且usage中也没有说明,是否不太好?建议在 usage 中说明,并在文档中都加上 0x。

heiher commented 6 months ago

@heiher -f 参数值不带 0x,却是16进制,并且usage中也没有说明,是否不太好?建议在 usage 中说明,并在文档中都加上 0x。

确实不太好。现在改成了接受多种进制数的fwmark值,并在usage中举例说明:

感谢建议~

MikeWang000000 commented 6 months ago

建议 strtoul() 的 base 使用 0 就好了,和 iptables 一致

heiher commented 6 months ago

建议 strtoul() 的 base 使用 0 就好了,和 iptables 一致

谢谢,已经改成这样了哈

dmserver commented 6 months ago

在clash里把打洞服务器地址去除 或者把地址设置成直连