wsl2 的 mirrored 网络模式下,在里面监听一个端口,同局域网同网段下的设备可以 telnet,不同网段的设备不行。

36 天前
 leeyuzhe

在 wsl2 中监听 6400 端口,然后从不同的网段的设备上 telnet 这个端口。 例如我设备的 ip 是 192.168.1.123 ,然后从 192.168.1.x 的设备上可以 telnet 192.168.1.123 6400 成功。在 192.168.2.x 等所有的非 192.168.1.x 的设备上都不能 telnet 成功。但是如果我在 windows 上面监听 6400 端口则所有网段的设备都可以 telnet 成功。 有人遇到过类似的问题么?

975 次点击
所在节点    Windows
17 条回复
zed1018
36 天前
盲猜一手是防火墙的原因,可以参考官方文档把 inbound 默认管理方式都设为 allow 试试。

https://learn.microsoft.com/en-us/windows/wsl/networking

另外考虑优先在 windows listen 这个端口排除一下是不是本身两个网段就不通而不是在 wsl2 里不通。
zed1018
36 天前
噢,后半句当我没说。没看完你的贴子。
leeyuzhe
36 天前
@zed1018 #1
防火墙我开始设置成了 allow ,后来干脆直接关了,然后并没有改善
leeyuzhe
36 天前
@leeyuzhe 破案了,把 cfw 的 tun 关了就行了,感觉那块网卡有问题还是
zed1018
36 天前
@leeyuzhe #4 恭喜解决问题。其实用代理就好了,一般来讲。不行可以配合 proxychains-ng
realJamespond
36 天前
子网掩码没设置对?
onlxx123
36 天前
@leeyuzhe 我有个相似的问题想请教,WSL2 网络模式也是 mirrored ,同局域网同网段下的设备可以访问,但是本机用 IP 却访问不了,只能 127.0.0.1 访问。
weak
36 天前
@onlxx123 wsl --update --pre-release 把 WSL2 更新到 2.0.0 或以上版本。
Ipsum
36 天前
@leeyuzhe tun 没有路由规则的时候会优先走他内部的,你自己加一条静态路由进去就行了。
leeyuzhe
36 天前
@Ipsum 请问具体如何操作,或者有什么关键词能让我搜索一下
leeyuzhe
36 天前
@realJamespond 不是的,你注意看我最后一句,我在 windows 上面监听的端口完全正常
Ipsum
36 天前
@leeyuzhe ip r add xxx.xxx.xxx.xxxx/xx via gwip
pkokp8
36 天前
🤔我之前解决不了,就用 nginx 代理
hez2010
36 天前
@onlxx123 你这个看上去是 dns 的配置问题了
mmdsun
36 天前
借楼问下,我最近也遇到有个奇葩问题,WSL 2 镜像网络模式。

WSL 2 中安装 Linux 版本的 docker (非 docker desktop ), 启动程序监听 0.0.0.0, docker 端口开了,防火墙关了。
本机只能 localhost:8080 访问,本机用 192.168 的本机 ip+8080 不能访问,当然局域网其他设备也不能访问。

最后只能本机安装了 nginx 转到了 localhost:8080 上,局域网才能访问。
dant
36 天前
> windows 上面监听 6400 端口则所有网段的设备都可以 telnet 成功
windows 默认有源进源出,linux 默认只会按路由表匹配
leeyuzhe
35 天前
@Ipsum #12
@dant
感谢,加了静态路由之后好了!!你们拯救了我一下午时间!
现在又有个新问题,我 wls2 里面的 kafka 客户端报错 Cannot assign requested address 。
```
Error connecting to node 10.0.15.247:9092 (id: 0 rack: null)
java.net.BindException: Cannot assign requested address
at sun.nio.ch.Net.connect0(Native Method) ~[?:1.8.0_402]
at sun.nio.ch.Net.connect(Net.java:482) ~[?:1.8.0_402]
at sun.nio.ch.Net.connect(Net.java:474) ~[?:1.8.0_402]
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:647) ~[?:1.8.0_402]
at org.apache.kafka.common.network.Selector.doConnect(Selector.java:277) ~[kafka-clients-3.1.2.jar:?]
at org.apache.kafka.common.network.Selector.connect(Selector.java:255) ~[kafka-clients-3.1.2.jar:?]
at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:990) ~[kafka-clients-3.1.2.jar:?]
at org.apache.kafka.clients.NetworkClient.access$600(NetworkClient.java:73) ~[kafka-clients-3.1.2.jar:?]
at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:1161) ~[kafka-clients-3.1.2.jar:?]
```
我通过打断点发现一个奇怪的问题,在 Net.connect 中调用了一个方法叫 isIPv6Available ,也是个 native 方法,在网络模式为 nat 或者 bridge 时返回 false ,在 mirrored 模式下返回了 true ,这是不是问题的原因。因为在另外的两种网络模式下都是好的,并且我的电脑跟 247 之间确实没有 ipv6 网络。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1031567

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX