Linux 下使用 EasyConnect 和 SSH on Socks5 做代理
前话
因为公司有时是远程开发,以为应该是 OpenVPN 或者 Cisco VPN 这种在 Linux 下也比较方便的 VPN。问了周围同事,都不知道运维给的是什么 VPN……后来看着界面查了下,是国产深信服的 EasyConnect,对 Linux 也不是很友好,所以这上来就是折腾 VPN 的一个坑。
EasyConnect
注意版本的问题
EasyConnect 不同版本是不兼容的,现在被广泛使用的是 7.6.3 和 7.6.7。
直接安装
安装 7.6.7 完是直接可以使用的,所以这里不多述。反观 7.6.3 会遇见很多问题,公司也是 7.6.3 版本,所以这里是对 7.6.3 的问题解决。
老版本下载和安装
这个我在 aur issue 里面看到有人刚好有 7.6.3 的官方链接:http://download.sangfor.com.cn/download/product/sslvpn/pkg/linux_01/EasyConnect_x64.deb。
既然 aur 上有 PKGBUILD 了,我公司电脑也刚好是 Arch Linux,那就直接改下里头下载地址和 md5 值就好了,然后重新 makepkg
了。
运行出错
安装的位置是在 /usr/share/sangfor/EasyConnect
, 终端运行,出现 Harfbuzz version is too old,因为 pango 的版本过高,所以需要可以找 debian 老版本的 pango 依赖,分别如下
- https://packages.debian.org/buster/libpango-1.0-0
- https://packages.debian.org/buster/libpangocairo-1.0-0
- https://packages.debian.org/buster/libpangoft2-1.0-0
将对应的 so 拷贝到安装目录下,可以看到
# > ldd EasyConnect | grep pango
libpangocairo-1.0.so.0 => /usr/share/sangfor/EasyConnect/./libpangocairo-1.0.so.0 (0x00007fc34fc6f000)
libpango-1.0.so.0 => /usr/share/sangfor/EasyConnect/./libpango-1.0.so.0 (0x00007fc34fae0000)
libpangoft2-1.0.so.0 => /usr/share/sangfor/EasyConnect/./libpangoft2-1.0.so.0 (0x00007fc34e277000)
登录闪退
输入登录信息后,卡个近 1min,就莫名退出,查到的资料是说没有启用服务,所以在登录卡顿的时候,使用 root 权限在终端输入:
#> /usr/share/sangfor/EasyConnect/resources/shell/sslservice.sh
当出现:
sslservice.sh start ...
start CSClient seccess!
start svpnservice seccess!
就说明可以了。
使用 Docker
另外一种使用方式就是,容器实例里面运行 EasyConnect,然后代理出来。刚好在 github 有 dockerfile,dockerhub 上面也有对应的镜像,所以这就方便多了!且还不用自己去每次卡时间点去启动命令!
上面用的是 7.6.3,容器就用 7.6.7 吧,参照 github 上面的教程,先拉个镜像下来:
docker pull hagb/docker-easyconnect:vncless-7.6.7
接着实例化镜像,然后将 1080 端口的 socks5 映射出来:
docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -v /tmp/.X11-unix:/tmp/.X11-unix -v $(xauth info | head -1 | awk '{print $3}'):/root/.Xauthority -e EXIT=1 -e TYPE=x11 -e DISPLAY=$DISPLAY -p 4449:1080 hagb/docker-easyconnect:vncless-7.6.7
SSH on Socks5
选择 Docker 使用 EasyConnect,平时工作是离不开 Shell 的。既然已经有 socks5 的代理,那么直接让 ssh 也走 socks5 代理就可以了。
安装 openbsd-netcat(并非 netcat):
pacman -S openbsd-netcat
然后 ssh 的连接加上代理:
ssh -o ProxyCommand='nc -x ${socks5_ip}:${socks5_port} %h %p' ${user}@${target_ip}
sftp 也是支持的:
sftp -o ProxyCommand='nc -x ${socks5_ip}:${socks5_port} %h %p' ${user}@${target_ip}
SSH on SSH
同样的,ssh 也是可以通过 ssh 做跳板的:
ssh -J ${proxy_user}@${proxy_ip}:${proxy_port} ${user}@${target_ip}
sftp 也是同理:
sftp -J ${proxy_user}@${proxy_ip}:${proxy_port} ${user}@${target_ip}