zhboner / realm

A network relay tool
MIT License
1.54k stars 285 forks source link

请问会支持IPv6转发吗 #36

Closed kdurov closed 3 years ago

kdurov commented 3 years ago

realm -l [::]:12345 -r example.com:12345 无法监听v6的样子

谢谢

zephyrchien commented 3 years ago

这是个BUG

https://github.com/zhboner/realm/blob/6f8cb4ea004609c564135b6e1a65b82169afb96a/src/lib.rs#L83-L87

kdurov commented 3 years ago

尝试了下1.5版本,此问题依然未彻底解决。 可以监听v6端口了,但是仍然无法转发到v6地址。 -r 后面直接写v6地址的话报错

thread 'tokio-runtime-worker' panicked at 'called Result::unwrap() on an Err value: ResolveError { kind: Proto(ProtoError { kind: Msg("Label contains invalid characters: Err(Errors { invalid_mapping, disallowed_by_std3_ascii_rules })") }) }', src/resolver.rs:18:53 note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

@zhboner @zephyrchien 麻烦看看是否还有解析问题,谢谢。

zephyrchien commented 3 years ago

感谢report。目前已经定位到问题了,但是还没有比较好的解决方法

标准库的 ipv6 parser 在解析ipv6+port时要求给IP加中括号(比如 [::1]:80),而直接解析ipv6的时候则不需要加中括号(比如 ::1)

realm目前的解析策略是启动时提取ipv6和port,同时定时解析ipv6。等发起新连接时再合并当前的ipv6+port,解析字符串得到socketaddr。如果按 [::1]:80 的格式填写地址,首次解析ipv6时就panic;如果以 ::1:80_ 的格式填写,则发起连接的时panic

@zhboner 也许是时候重构一下resolver了,顺便还能把 #24 解决掉。能否把我加入collaborators,我会负责这部分的重构