警告
本文最后更新于 2022-06-23,文中内容可能已过时。
前言
记录本篇内容实际上是希望有人能知道有badvpn_tun2socks
这个东西可以将socks
转化为vpn
, 或者只有我不知道这个东西了。
需求:公司有台服务器在国外,需要拨号到公司处理一些数据,现在用的是pptp
,拨号也成功了,而且很稳定,但就是延迟130ms上下,上级要求降低延迟,经过多方面查询,在ucloud
上找到了一个线路加速的方案,不过该加速并不支持pptp
的加速,于是找到了另一种方案,用该线路加速ssh
,在服务器上通过ssh
动态端口转发建立socks
,然后将socks
转化为vpn
来实现加速.
如果有人处理过以上需求的,希望能交流下你们的解决方案。万分感谢!
参考资料:
https://github.com/ambrop72/badvpn.git
https://github.com/yangchuansheng/love-gfw
1
2
3
4
|
$> git clone https://github.com/ambrop72/badvpn.git
$> # 因为只需要vpn的,因此加上这些参数(其实我也先把全部功能加上看下有些什么东西,但是我编译不过去!),详细文档可以参看github的文档
$> cmake .. -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1 -DBUILD_UDPGW=1
$> make && make install
|
1# 2. badvpn_tun2socks 使用
1
2
3
4
5
6
7
8
9
10
11
|
# 创建tun接口
$> ip tuntap add dev tun0 mode tun
# 为其分配ip
$> ip addr add 10.0.0.1/24 dev tun0
# 启动接口
$> ip link set tun0 up
# 启动 badvpn_tun2socks socks 转化为 vpn
$> badvpn-tun2socks --tundev tun0 --netif-ipaddr 10.1.0.2 --netif-netmask 255.255.255.0 --socks-server-addr "127.0.0.1:1080"
# 下面操作就和vpn拨号成功后一样了
# 添加默认路由 serverA 主机同网段的其他主机
$> ip route add 10.172.11.13 via 10.1.0.2
|
成功运行后就可以直接通过路由连接socks
通往段的其他主机。
1
|
$> ssh -4 -N -C -D 1080 <user>@<remote_ip>
|
1
2
3
|
$> ip tuntap add dev tun0 mode tun
$> ip addr add 10.0.0.1/24 dev tun0
$> ip link set tun0 up
|
1
|
$> badvpn-tun2socks --tundev tun0 --netif-ipaddr 10.1.0.2 --netif-netmask 255.255.255.0 --socks-server-addr "127.0.0.1:1080"
|
1
|
$> ip route add <other_ip> via 10.1.0.2
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
$> vim /usr/local/bin/badvpn-control # 注意执行权限
#!/bin/bash
#################################################
# author 0x5c0f
# date 2019-08-13
# email mail@0x5c0f.cc
# web blog.0x5c0f.cc
# version 1.0.0
# last update 2019-08-13
# descript Use : ./badvpn-control -h
#################################################
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
# SOCKS server IP
SOCKS_SERVER="${SOCKS_HOST}"
# SOCKS port
SOCKS_PORT="${SOCKS_PORT}"
# tun dev
TUN_NETWORK_DEV="tun0"
# tun ip prefix
TUN_NETWORK_PREFIX="10.1.0"
# route ip
TUN_ROUTE_IP=($(eval echo ${SOCKS_ROUTE}))
badvpn_start(){
ip tuntap add dev "${TUN_NETWORK_DEV}" mode tun
ip addr add "${TUN_NETWORK_PREFIX}.1/24" dev "${TUN_NETWORK_DEV}"
ip link set "${TUN_NETWORK_DEV}" up
# add route
for _ip in ${TUN_ROUTE_IP[@]}; do
ip route add "${_ip}" via "${TUN_NETWORK_PREFIX}.2"
done
# start badvpn_tun2socks (https://github.com/ambrop72/badvpn.git)
badvpn-tun2socks --tundev "${TUN_NETWORK_DEV}" --netif-ipaddr "${TUN_NETWORK_PREFIX}.2" --netif-netmask 255.255.255.0 --socks-server-addr "${SOCKS_SERVER}:${SOCKS_PORT}"
}
badvpn_stop(){
# delete route
for _ip in ${TUN_ROUTE_IP[@]}; do
ip route del "${_ip}" via "${TUN_NETWORK_PREFIX}.2"
done
# delete network dev
ip link set "${TUN_NETWORK_DEV}" down
ip addr del "${TUN_NETWORK_PREFIX}.1/24" dev "${TUN_NETWORK_DEV}"
ip tuntap del dev "${TUN_NETWORK_DEV}" mode tun
}
main(){
case "$1" in
"start")
badvpn_start
;;
"stop")
badvpn_stop
;;
*)
echo "$0 start|stop"
;;
esac
}
main $@
|
用于管理ssh
动态转发的systemd
,其他方式请忽略此类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$> vim /usr/lib/systemd/system/socketssh-tun.service
[Unit]
Description=socketssh tun
After=network.target
[Service]
Type=simple
PIDFile=/run/socketssh-tun.pid
ExecStart=/usr/bin/ssh -4 -N -C -D 1080 <user>@<remote_ip>
[Install]
WantedBy=multi-user.target
$> systemctl daemon-reload
$> systemctl status socketssh-tun.service
|
用于管理badvpn-tun2socks
启动关闭的systemd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
$> vim /etc/sysconfig/badvpn
SOCKS_HOST="127.0.0.1"
SOCKS_PORT="1090"
# 只支持ipv4
GOLANG_HOST=""
# 支持配置多个 空格隔开
SOCKS_ROUTE="${GOLANG_HOST}"
$> vim /usr/lib/systemd/system/badvpn-tun2socks.service
[Unit]
Description=badvpn-tun2socks
After=network.target
[Service]
Type=simple
EnvironmentFile=/etc/sysconfig/badvpn
PIDFile=/run/badvpn-tun2socks.pid
ExecStart=/usr/local/bin/badvpn-control start
ExecStopPost=/usr/local/bin/badvpn-control stop
[Install]
WantedBy=multi-user.target
$> systemctl daemon-reload
$> systemctl status badvpn-tun2socks.service
|
至此,搞完了 !