我想问你一个关于 tun 接口的问题,但没有 OpenVPN。
我有两个隧道流量的应用程序:“sgsn 用户空间应用程序”从 tun 接口“tun sgsn”读取 IP 数据包,将它们发送到“ggsn 用户空间应用程序”,这个应用程序将它们写入“tun ggsn”。它也以另一种方式工作,因此我可以进行有效的 ssh 会话、复制文件等。
所以,数据包是这样的:
scp 客户端 --> sgsn tun 接口 ---> 隧道通过我的应用程序 -----> ggsn tun 接口(放在这里) ----------> sshd
现在,我已经尝试使用 IPv4 并且它可以工作,但是当我切换到 IPv6 时,IP 数据包被写入“tun ggsn”并且 IP 堆栈将其丢弃。我用 dropwatch 看过它,它说丢弃在 ip_rcv+c0 中。
路由必须是正确的,否则数据包一开始就不会进入 tun_sgsn。
我在 CentOS 6.7 和 7.1 中都尝试过,结果相同。但是,在 7.1 中,我只有一个主机,所以我使用 ip6tables 对 NAT 地址做了一些技巧,因此来自每个用户空间应用程序(scp 和 sshd)的流量都通过 tun 接口。我这么说只是为了从一开始就很清楚,但是对于 6.7,我有两台机器并且没有 NAT(我知道 NAT 在用于 IPv6 的 CentOS 6.7 中不起作用)。我在 tun ggsn 接口中使用了 tcpdump,并且 IPv6 数据报似乎没问题。
另一个提示:如果我直接 scp 到 tun_ggsn 接口,它可以工作,但我认为这不会丢弃 tun 驱动程序的任何内容,因为在同一台机器上意味着 IP 数据包不会进入 TCP/IP 堆栈到达 tun 驱动程序(事实上,如果我这样做,tcpdump 不会捕获数据包)。
任何帮助将不胜感激,非常感谢您提前。