XX-Net

Posted on By ᵇᵒ

Installation

XX-Net,此处省略介绍一万字…

  1. 下载XX-Net.

  2. 安装,以Linux为例,其他平台参考官方Wiki.
    • 自动导入证书,需安装 libnss3-tools 包
      sudo apt-get install libnss3-tools

    • 工具是基于python写的,运行需要先安装gtk
      sudo apt-get install python-gtk2

    • ubuntu 下,可能需要安装
      sudo apt-get install python-openssl
      sudo apt-get install libffi-dev
      sudo apt-get install -y python-gtk2
      sudo apt-get install python-appindicator
      sudo apt-get install libnss3-tools

    • 启动XX-Net
      cd到XX-Net目录执行 ./start 启动
      或者后台运行: 在终端中运行: xx_net.sh start/stop/restart
      嫌麻烦还可以在环境变量里配置别名启动:
      alias xxstart='sudo ~/XX-Net-3.6.6/xx_net.sh start'
      alias xxstop='sudo ~/XX-Net-3.6.6/xx_net.sh stop'
      alias xxrestart='sudo ~/XX-Net-3.6.6/xx_net.sh restart'
      还可以设置开机自启: 在/etc/rc.local中添加一行:
      sudo /home/username/xxnet/xx_net.sh start

  3. 设置代理
    /styles/images/xx-net/proxy.png

    • 开起全局代理后,对于国内网站访问变慢的问题,推荐使用Chrome和SwitchyOmega扩展,让国内网站不走代理直接访问.
      操作比较简单,具体参考官方Wiki.

    • 对于Git通过网络远程操作,本身是不受上面的全局代理影响,如果一定要使用代理,配置git config:
      git config --global http.proxy 'http://127.0.0.1:8087'
      git config --global https.proxy 'https://127.0.0.1:8087'
      如果是socks代理,替换如下:
      git config --global http.proxy 'socks5://127.0.0.1:8087'
      git config --global https.proxy 'socks5://127.0.0.1:8087'
      另外,对于github类似网站配置git代理后,可能会出现证书验证失败问题,配置git禁止验证:
      git config --global http.sslverify false
      git config --global https.sslverify false
      删除代理:
      git config --global --unset http.proxy
      git config --global --unset https.proxy

  4. 开启ipv6
    由于ipv4已经被墙得生活不能自理了,现在xx-net几乎必须使用ipv6才能科学上网。
    sudo apt-get install miredo
    

    查看网卡配置 ifconfig,在结果中应该能看见一个叫 teredo 的虚拟网卡

    启动miredo

    sudo miredo
    

    重启后有可能需要手动启动,至少在我的机子上是这样,可以把这个操作加入到开机自动启动中去: 在/etc/rc.local中添加启动命令行sudo miredo,必须要添加到语句:exit 0 前面才行。
    另外,在xx-net配置好以后,可以在localhost:8087设置页面里打开系统配置中的开机自动启动选项。这样以后开机就再也不用手动启动miredo和xx-net了。

    Note
    有时候teredo的服务器出问题也会导致ipv6无法使用,最直接的现象就是ifconfig指令无法看见teredo虚拟网卡。这时候可以在/etc/miredo.conf文件中更改服务器地址

    ServerAddress <服务器地址>
    

    可选的服务器地址:

    teredo.remlab.net
    teredo2.remlab.net
    teredo-debian.remlab.net
    teredo.ngix.ne.kr
    teredo.ginzado.ne.jp
    teredo.trex.fi
    teredo.iks-jena.de
    debian-miredo.progsoc.org
    win10.ipv6.microsoft.com
    

    更改后重启miredo

    sudo service miredo restart
    

    ifconfig能看见teredo虚拟网卡就表示正常了。

    对于windows系统更改teredo服务器,使用如下指令:

    // 修改 Teredo 服务器为 teredo.remlab.net
    netsh interface teredo set state server=teredo.remlab.net
    
  5. 等待
    静静地等待
    等待XX-Net扫描出可用的ip
    等待时间视各地网络和墙的疯狂程度而异.

  6. 创建appid

    扫描出可用的ip并连接上网络后,就可以访问墙外网站了.
    但这时候还不可以看视频以及下载,因为使用的是软件默认集成的公共appid,本身做了限制.

    扫描的可用ip相当于你能访问的通道, appid相当于你能使用的访问流量.
    appid由Google App Engine良心提供,一个id每天可用1G,一个账号最多申请12个id.

    具体操作参考官方Wiki, 三个步骤:创建appid、部署服务端、配置appid.

OSX

最近工作平台全都切换到OSX了,所以记录下OSX下面XX-net的安装配置。

  1. 安装miredo,下载地址(任选其一):

    Note
    更改miredo ipv6服务器的两种方法:

    • sudo vim /etc/miredo.conf编辑配置文件,将测试服teredo.remlab.net注释掉,更换成替换的服务器。
    • 打开Mac系统设置里的miredo图标(安装了后会出现),在server一栏填入替换的服务器
      其实这种方式也是更改的/etc/miredo.conf文件。
  2. 安装Tunnelblick ,下载地址:
    https://tunnelblick.net/downloads.html

    Note

    • OSX开启了sip很可能导致安装失败,如若失败 关闭sip:
      command + R        // 重启电脑进入恢复模式
      csrutil disable    // 实用工具 -> Terminal
      reboot             // 重启电脑
      
    • tuntaposx过于老旧,安装后使用经常出现ipv6连接失败,不建议使用,而是用tunnelblick代替。
  3. 安装XX-net,配置google app engine project id

  4. 开启tunnelblick:
    sudo kextload /Applications/Tunnelblick.app/Contents/Resources/tun-signed.kext
    

    开启miredo:

    sudo miredo
    

    开启XX-net:

    sudo ~/XX-Net/start
    

    以上三步可以写成一个shell脚本:

    #!/bin/bash
    
    sudo kextload /Applications/Tunnelblick.app/Contents/Resources/tun-signed.kext
    sudo miredo
    sudo ~/XX-Net/start
    

    shell脚本添加执行权限:

    sudo chmod +x ~/vpn.sh
    

    然后在环境变量里(~/.bash_profile)给shell脚本设置一个alias:

    alias vpn=~/vpn.sh
    

    以后只需要在终端里输入vpn就可以开启翻墙。

    Note
    检测tunnelblick是否开启:

    kextstat | grep tun
    

    检测miredo是否开启:

    ps aux | grep miredo
    

    检测miredo开启后ipv6是否可用:

    系统偏好设置 -> miredo -> teredo tunnel是否变绿(如果没绿 可尝试取消勾选再勾选)
    // 正常安装好miredo后设置面板会出现miredo图标
    

Android studio certificates

在使用Android studio进行开发下载新的插件或者库的时候,很容易因为被墙而连接超时(现在这种情况越来越好了,很多被墙的公司都在国内架设了镜像):

Caused by: java.net.SocketTimeoutException: connect timed out
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:339)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)

如果开启XX-net使用AS下载插件或者库,会引发AS的证书问题:

Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
	at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1959)
	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
	at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1514)
	at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
	at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026)
	at sun.security.ssl.Handshaker.process_record(Handshaker.java:961)
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1072)
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)

原因在于证书,XX-net访问https的网站,需要有证书,而浏览器已经安装过了,不需要我们自己安装,但是AS下载插件或者三方包的时候使用的是java默认的证书,因此其实我们只需要给java安装证书即可解决这个问题。由于AS现在默认使用的是自带的openJDK,所以证书需要安装在AS的openJDK下面。

Android studio自带openJDK的证书:

/Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/security/cacerts

Android studio缓存的证书(这里当前使用的AS版本为3.2):

/Users/hcb/Library/Caches/AndroidStudio3.2/tasks/cacerts

系统安装Java默认的证书(这里安装的是jdk1.8):

/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/lib/security/cacerts

keytool导入XX-net证书至jdk证书:

sudo keytool -import -noprompt -trustcacerts -alias XX-net -file ~/Desktop/CA.crt -keystore /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/security/cacerts  -storepass changeit
  • -alias 参数后跟自定义的别名
  • -file 参数后跟需要导入的XX-net CA证书路径
  • -keystore 参数后跟jdk默认的证书路径
  • -storepass 参数后跟的是jdk默认证书的密码,默认是changeit

Note
AS还需要在设置里开启HTTP Proxy

Host name: 127.0.0.1
Port number: 8086

需要注意的是,现在开启proxy后会默认一直配置在文件~/.gradle/gradle.properties里:

## For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Tue Oct 23 10:12:40 CST 2018
systemProp.https.proxyPort=8086
systemProp.http.proxyHost=127.0.0.1
systemProp.https.proxyHost=127.0.0.1
systemProp.http.proxyPort=8086

如果不需要代理可修改该文件,将其注释掉。 印象中以前版本的AS只会配置在当前Android工程的gradle.properties文件里,现在这个改动全局生效,感觉不太方便。

Note
有时候我们启用过翻墙(代理),并没有对Android Studio配置proxy,但Android Studio的proxy设置里依然会提示You have JVM property "https.proxyHost" set to ...,而且会导致下载依赖库失败,感觉是Android Studio的一个锅。
解决办法是在terminal里输入如下指令 然后重启Android Studio:

JAVA_OPTS="$JAVA_OPTS -DsocksProxtPort"

可以参考stackoverflow 或者http://mxw.pl/blog/?p=4