单独一台机器测试OpenVPN加密隧道的有关问题和解决
单独一台机器测试OpenVPN加密隧道的问题和解决
其实这篇文章和OpenVPN的关系倒不是很大,只是通过OpenVPN测试时暴露出的问题。这篇文章里面倒是包含了很多IP路由以及conntrack的细节内容。
有时候,为了节省机器,我希望在一台设备上模拟多个设备,当然,使用网络命名空间是可以的,但是我的内核版本不支持...所以我希望使用纯协议栈的方法来做到。此时需要解决的问题并不比程序员在编写多线程程序时要少。你要知道什么是共享的,什么是独享的,什么时候什么字段会被什么模块修改...诸如此类,不一而足...
其实这篇文章和OpenVPN的关系倒不是很大,只是通过OpenVPN测试时暴露出的问题。这篇文章里面倒是包含了很多IP路由以及conntrack的细节内容。
有时候,为了节省机器,我希望在一台设备上模拟多个设备,当然,使用网络命名空间是可以的,但是我的内核版本不支持...所以我希望使用纯协议栈的方法来做到。此时需要解决的问题并不比程序员在编写多线程程序时要少。你要知道什么是共享的,什么是独享的,什么时候什么字段会被什么模块修改...诸如此类,不一而足...
先不谈OpenVPN,仅仅考虑一台机器上两个网卡的情况,如果你ping一个网卡上配置的地址,事实上结果是不会经过这个网卡的,因为在路由模块中,协议栈会发现这事实上是自己和自己通信,因此会直接bypass掉真实网卡。现在加入OpenVPN,我希望的是数据包通过下面这个图上所标示的路径发出去,但事实上没有,原因的注释也在图中:
上图所示,错误原因也已经给出了,一些额外的分析也做过了,那么正确的方式应该是什么样的呢?下图给出: