ToyVpn和IPv6混淆了IPv4堆栈

时间:2015-10-14 18:05:14

标签: android ipv6

我一直在使用ToyVpn示例代码,并且可以成功地使用它来通过IPv4隧道传输IPv4。当我以这种方式运行ToyVpn时,正确的事情发生了,一切都很顺利。然而,当我通过IPv4隧道传输IPv6时,它似乎搞砸了我的Android设备的IPv4堆栈。

我看到IPv6正在通过IPv4进行隧道传输,但是当我尝试运行任何IPv4应用程序(例如从终端窗口ping)时,我得到:“connect:Network is unreachable”。这就好像IPv4堆栈仅限于仅承载IPv6-in-IPv4隧道,并且在隧道处于活动状态时不可能进行其他IPv4操作。这是ToyVpn代码设置和操作IPv6 VPN服务的方式中的错误吗?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题,似乎是在分配IPv6时 操作系统禁用IPv4堆栈到VPN接口。修复是 将以下补丁添加到我发现的ToyVpnService.java中 通过查看ics-openvpn-master发行版。有没有人 知道我应该向谁汇报吗?

谢谢 - 弗雷德

---
--- ToyVpnService.java.orig 2015-10-13 11:59:32.933593178 -0700
+++ ToyVpnService.java          2015-10-16 13:17:11.579120232 -0700
@@ -23,6 +23,7 @@
 import android.os.Handler;
 import android.os.Message;
 import android.os.ParcelFileDescriptor;
+import android.system.OsConstants;
 import android.util.Log;
 import android.widget.Toast;

@@ -295,6 +296,11 @@

         // Configure a builder while parsing the parameters.
         Builder builder = new Builder();
+
+   // Copied from ics-openvpn-master
+   builder.allowFamily(OsConstants.AF_INET);
+   builder.allowFamily(OsConstants.AF_INET6);
+
         for (String parameter : parameters.split(" ")) {
             String[] fields = parameter.split(",");
             try {