GHL's Notes/

如何用 tun2socks 更优雅的实现Linux全局代理

前面一篇文章说过,用 iptables+redsocks实现全局代理,但用久了我才发现这玩意容易卡一些奇奇怪怪的错误,后来我才想起有tun2socks这东西,并且优雅简单,更方便。

本教程不适合CentOS用户

tun2socks

tun2socks分支有相当多,如下

  1. go-tun2socks(Golang版本)
  2. badvpn-tun2socks(C版本)

我个人习惯用badvpn的版本,因为占内存小,golang缺点就是流量一大内存占用也跟着大,非常坑爹。

安装

badvpn安装很简单,官方有binary源
badvpn下载binary源

不过更新速度好像比较慢,还是直接编译源码方便

先安装依赖

apt install libnss3-dev build-essential make cmake net-tools git

然后一键编译

git clone https://github.com/ambrop72/badvpn.git && cd badvpn && mkdir build && cd build && cmake .. -DCMAKE_INSTALL_PREFIX=/usr && make install

编译完了就能用了。但还需要自己添加一个tun网卡,需要开启Linux tun/tap支持

为了偷懒,我把这些写成一键脚本

新建一个文件,自动添加网卡,这样就不需要每次手动添加了,或者自己去新建一个/etc/network/里面的配置文件,/etc/init.d/tun2s,名字随意,一定要在/etc/init.d/目录

给这个文件添加以下内容

#!/bin/bash
### BEGIN INIT INFO
# Provides:          tun2s
# Required-Start:    $network $syslog
# Required-Stop:     $syslog 
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: fast and reliable load balancing reverse proxy
# Description:       This file should be used to start and stop haproxy.
### END INIT INFO

ip tuntap add dev tun2 mode tun
ifconfig tun2 192.168.168.0/24 netmask 255.255.255.0
route add default gw 192.168.168.2

192.168.168.0那个可以改,如果被占用你就改个其他的

然后再新建一个文件,/etc/systemd/system/tun2socks.service,使用systemd守护tun2socks防止挂彩

添加以下内容

[Unit]
Description=tun2socks
After=network.target
Wants=network.target

[Service]
Type=simple
#PIDFile=/run/tun2socks.pid
User=root
Group=root
ExecStart=/usr/bin/badvpn-tun2socks --netif-ipaddr 192.168.168.2 --netif-netmask 255.255.255.0 --socks-server-addr "192.168.xx.1:8888" --tundev "tun2" 
Restart=always
# Don't restart in the case of configuration error
RestartPreventExitStatus=23

[Install]
WantedBy=multi-user.target

tun2改成你tun网卡名字,netif改成你在上面填的虚拟子网段,socks-server-addr改成你的虚拟机网段,:8888改成你的socks5端口

然后添加开机启动

update-rc.d tun2s(或者你自己改的名字) defaults
systemctl enable tun2socks

搞定了,简单快速。要jb iptables转发来转发去

留下一条评论

暂无评论