用gost透明代理让内网服务器访问互联网
昨天在水木看到个问题“没有网关的root权限,怎样让内网服务器联网?”
这自然不难,在大中华局域网环境的我们早就练就一身翻墙本领。
问题
http://www.newsmth.net/nForum/#!article/LinuxApp/941233
发信人: doggeddog (doggeddog), 信区: LinuxApp
标 题: 求教大神,没有网关的root权限,怎样让内网服务器联网?
发信站: 水木社区 (Sat Nov 3 16:46:47 2018), 站内
原来那些机器是可以上网的,后来被公司运维关了
现在的情况是,网关那台机器有多个网卡,可以联网。但我只有普通用户权限,因此不能修改iptables。
内网的那些机器,我有root权限
我试过的方案:
1、proxychains,在网关搭了个socks5代理,
可以成功,但不是所有应用都支持
2、redsocks,在内网机器搭第二层代理,连接网关的代理,然后修改本机iptables。没有成功,原因不明
求教各位大神,还有没有其他方案?
SSH隧道
我首先拿出当初让阿里云无流量服务器也能访问外网的 vpn-over-ssh
脚本,模拟出环境成功运行,另外用 OpenVPN
方案也不错,这 2 个方案效果都很好,ICMP 协议也能搞掂,但都使用到 iptables
,如果没 root 则需用网关做端口转发到外网的服务器。
几年后再次使用 vpn-over-ssh
脚本,觉得太麻烦了,老技术不想拿出来炒冷饭,该方案仅供参观,就 show 一下最后能 ping 谷歌的结果。
客户端A无法上网,客户端B可以但无root,A和B联通,C在外网。系统均为 CentOS 6.9,A和C都安装tunctl。
1 | [root@centos ~]# rpm -ivh tunctl-1.5-3.el6.x86_64.rpm |
A ssh登录B,B转发 TCP 22 到C,A和C建立隧道,各自用 iptables
处理转发。
1 | [root@centos ~]# ifconfig tun2 | grep addr |
透明代理
趁着空闲学习一些新玩意,看了下 gost、redsocks、V2Ray 这类做透明代理,虽然只能处理 TCP/UDP,但也还不错了,只要解决 DNS 解析,能不能 ping 都无所谓。
最开始是折腾 gost
+ badvpn-tun2socks
组合,试验了 3 个方案,发现 gost
+ iptables
直接就可以搞掂,badvpn-tun2socks
和 badvpn-udpgw
都可以不用。
gost
做为标准 SOCKS5 代理可处理 UDP 数据,限制条件:
- 代理链中的 HTTP 代理节点必须支持 CONNECT 方法。
- 如果要转发 SOCKS5 的 BIND 和 UDP 请求,代理链的末端(最后一个-F参数)必须支持 gost SOCKS5 类型代理。
以下就只写出最简方案:
在能访问互联网的网关服务器 192.168.1.200
用 gost
开个 socks5 代理:
1 | gost -L=socks5://user:password@:1080 |
然后客户端服务器连接上面的代理服务器并设置为透明代理,我这里选用 1.1.1.1
作为 DNS 服务器:
1 | echo "nameserver 127.0.0.1" > /etc/resolv.conf |
4 行命令,路由都不用处理,有没有觉得简单到要爆?试试 dig
yum
apt-get
nslookup
w3m
wget
curl
等命令都能正常使用,ping
域名虽然无结果,但还是能解析。