ipv6 点对点通讯的问题

2022-10-20 11:52:43 +08:00
 acbot

:INPUT DROP :FORWARD DROP

-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -m conntrack --ctstate INVALID -j DROP

不论是 v4 还是 v6,大多路由器默认的防火墙规则基本都是这样配置的,要开放一个端口到公网就需要通过路由器接口等方式来修改这个防火墙规则才能让公网的流量进入。当某些情况下无法或者是不方便这个防火墙规则,比如:

  1. 路由器根本没有提供配置防火墙的接口或者是不掌握防火墙控制权的情况;
  2. 应用端口随机不固定的情况;

那么要实现 v6 的端口开放或者说两点之前直接互访,是不是还是得借助类似 v4 nat 打洞或 upnp 这样的技术才能实现呢?有没有简单的实现按理可以参考呢?现有的很多开源 BT 软件他们是不是都实现了 v6 直接点对点通讯呢

1376 次点击
所在节点    程序员
11 条回复
Jirajine
2022-10-20 12:04:59 +08:00
都有公网 ipv6 的情况下打洞不要太简单,直接两边各监听一个端口,互相发包就行。两边的防火墙的状态追踪是不能同步的,双方都会认为是我方主动建立的连接。
不像 NAPT 情况下你需要先确定一个公网可达的 socket 映射。
leonshaw
2022-10-20 12:13:11 +08:00
UDP 直接对发,TCP 绑好端口互相 connect 。
acbot
2022-10-20 12:42:48 +08:00
@Jirajine
@leonshaw 谢谢!如果双方的端口是随机的,是不是还是得需要有一个查询过程?
JohnBull
2022-10-20 13:15:41 +08:00
没看懂,规则都加在 INPUT 链里面了,怎么可能控制不了?
acbot
2022-10-20 13:25:14 +08:00
@JohnBull 描述中我已经举例了。

"...当某些情况下无法或者是不方便这个防火墙规则,比如:

1. 路由器根本没有提供配置防火墙的接口或者是不掌握防火墙控制权的情况;
2. 应用端口随机不固定的情况;..."
leonshaw
2022-10-20 13:31:34 +08:00
@acbot 随机端口那肯定要某种方式互相通知
Jirajine
2022-10-20 13:52:09 +08:00
@acbot 通过其他信道交换 socket 地址。
如中心服务器、用户手动输入、用户扫码编码到 id 里让用户通过 IM 等工具发送给对方等等。
acbot
2022-10-20 13:59:55 +08:00
smallthing
2022-10-20 16:40:12 +08:00
@acbot 中心服务器。ID 分享。甚至根据时间范围+IP 地址生成固定浮动端口号。
acbot
2022-10-20 17:13:22 +08:00
@smallthing 谢谢,所以要实现真正的点对点通讯(双方端口不定,地址不定的情况),其实还是得要一个类似 NAT 4 得那种打洞服务器才行,只是 v6 这个服务器功能要简单得多,只需要提供端口这些信息就行了!
smallthing
2022-10-21 20:42:44 +08:00
@acbot 可以双方约定算法决定端口范围 然后互相探测。

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

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

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

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

© 2021 V2EX