vtun icon indicating copy to clipboard operation
vtun copied to clipboard

太鱼了,有些问题想问

Open intxff opened this issue 3 years ago • 1 comments

知道的和不清楚的

  • 客户端和服务端都是 tun + socket 的组合,客户端 tun 负责采集所有除了到 dns servervpn serverIP Packet,然后通过 socket 发给服务端
  • 服务端启动了转发,FORWARD 使其能接收 dstIP 不为自己的包,转发时 tun 和物理网卡都因 iptables masquerade 改写 srcIP 为自己
  • 服务端从 socket 接收到的数据就是客户端 tun 捕获的包,udptotun 写入 tun,然后我就迷糊了。。。tun 是怎么通过物理网卡发出去的,回包又是怎么被再次交给 tun 或者 socket? 具体看下面的我的想法

流程图

  • 这个图是描述客户端 APP 通过端口 12345 请求互联网上的服务器 IP: E, Port: 30000udp 类型的服务时,数据传输过程
  • 图中带颜色方格是一个 IP packet,颜色不同用于区分 (srcIP, srcPort, dstIP, dstPort) 有区别,连在一起的两个方格是一个包,后一个是前一个的 payload

我理解的流程如下

  • app 发起请求,生成红色的包,由于 iptables 设定,所以流入 tun 设备
  • vpntun 读出这个包并作为 udp socketpayload 发出。我这画的绿色的包可能有问题,udp socket 建立时选的默认网卡可能大概率就是物理网卡,不过应该不影响后续过程。如果选的是 tun 设备作为本地地址,那么出去的时候由于 iptables masquerade 也会改写成蓝色的包
  • 蓝色的包到达服务端后,通过 udp socket 交给了 vpn序号6的位置,现在想是画错了,应该没有蓝色的包了,直接就是红色
  • 红色包被 vpn 写入 tuntun 送到内核,iptables masquerade 改变 srcIPC,得到黑色包,经过物理网卡发送时,srcIP 变为 D,得到紫色
  • 服务响应发回橘黄

我的问题

  • 橘黄包要发送到 D12345 端口,然而这个请求不是 D 发的,内核自然没办法给相应用户进程去处理?
  • 图中序号 8-10 的过程是怎么完成的,服务端的配置仅仅是添加并启动了 tun 设备,并没有设置 tun 设备的路由,vpnudppayload 数据写入到 tuntun 发给内核,内核查询路由发现什么都做不了?

希望能得到解答,感谢

intxff avatar Jul 06 '22 11:07 intxff

  • 第一个问题我理解了,之前对 masquerade 理解有问题。回包也会查询是否之前做了 masquerade 并修改,所以会有物理网卡到 tunvpn 进程的过程。
  • 现在回包到达 tun 的是 (E, 30000, C, 12345),这时候被从 tun 读出,在服务器上是否有其对应的进程根本没关系,因为由 vpn 处理了,不需要常规情况下内核处理时要通过 (E, 30000, C, 12345) 找到 fd 呈递给相应进程的过程。
  • 所以我的问题只有最后一个了,在没设置路由的情况下,怎么把 tun 数据从物理设备发出,又是怎么回来的

intxff avatar Jul 07 '22 02:07 intxff

怎么把 tun 数据从物理设备发出,又是怎么回来的? 用iptables相互转发

Masquerade outgoing traffic

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Allow return traffic

iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT

Forward everything

iptables -A FORWARD -j ACCEPT

net-byte avatar Sep 01 '22 15:09 net-byte