Installation
XX-Net,此处省略介绍一万字…
-
下载XX-Net.
- 安装,以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
-
-
设置代理
- 开起全局代理后,对于国内网站访问变慢的问题,推荐使用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
- 开起全局代理后,对于国内网站访问变慢的问题,推荐使用Chrome和SwitchyOmega扩展,让国内网站不走代理直接访问.
- 开启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
-
等待
静静地等待
等待XX-Net扫描出可用的ip
等待时间视各地网络和墙的疯狂程度而异. -
创建appid
扫描出可用的ip并连接上网络后,就可以访问墙外网站了.
但这时候还不可以看视频以及下载,因为使用的是软件默认集成的公共appid,本身做了限制.扫描的可用ip相当于你能访问的通道, appid相当于你能使用的访问流量.
appid由Google App Engine良心提供,一个id每天可用1G,一个账号最多申请12个id.具体操作参考官方Wiki, 三个步骤:创建appid、部署服务端、配置appid.
OSX
最近工作平台全都切换到OSX了,所以记录下OSX下面XX-net的安装配置。
- 安装miredo,下载地址(任选其一):
Note
更改miredo ipv6服务器的两种方法:sudo vim /etc/miredo.conf
编辑配置文件,将测试服teredo.remlab.net
注释掉,更换成替换的服务器。- 打开Mac系统设置里的miredo图标(安装了后会出现),在server一栏填入替换的服务器
其实这种方式也是更改的/etc/miredo.conf
文件。
-
安装Tunnelblick ,下载地址:
https://tunnelblick.net/downloads.htmlNote
- OSX开启了sip很可能导致安装失败,如若失败 关闭sip:
command + R // 重启电脑进入恢复模式 csrutil disable // 实用工具 -> Terminal reboot // 重启电脑
- tuntaposx过于老旧,安装后使用经常出现ipv6连接失败,不建议使用,而是用tunnelblick代替。
- OSX开启了sip很可能导致安装失败,如若失败 关闭sip:
-
安装XX-net,配置google app engine project id
- 开启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"