我一直在使用ToyVpn示例代码,并且可以成功地使用它在IPv4上建立IPv4隧道。当我以这种方式运行ToyVpn时,正确的事情发生了,一切都很好。然而,当我在IPv4上传输IPv6时,它似乎弄乱了我的安卓设备的IPv4堆栈。
正如我所期望的那样,我看到IPv6在IPv4上被隧道传输,但是当我尝试运行任何IPv4应用程序(例如从终端窗口执行ping )时,我得到的结果是:“连接:网络不可达”。这就好像IPv4堆栈已经被限制为仅承载IPv6-in-IPv4隧道,并且当隧道处于活动状态时不可能进行其他IPv4操作。这是ToyVpn代码为IPv6设置和操作VPN服务的方式中的错误吗?
发布于 2015-10-17 04:23:44
在回答我自己的问题时,似乎当IPv6分配给VPN接口时,操作系统会禁用IPv4堆栈。修复方法是将下面的补丁添加到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 {https://stackoverflow.com/questions/33132511
复制相似问题