一、背景
内网只有1台服务器可以上网,其他服务器或终端无法上网。解决其他服务器或终端无法上网的问题。这里需要通过能上网的服务器去代理其他无网络服务器的上网问题。
二、代理服务一键安装
curl -L https://mirrors.host900.com/https://github.com/snail007/goproxy/blob/master/install_auto.sh | bash
三、代理使用
1、客户端无法上网篇
两台虚拟机:
代理服务器:1台2张网卡(1张NAT或桥接,1张仅主机模式)
客户端:1台1张网卡(仅主机模式)
- 在代理服务器上使用代理命令
proxy socks -t tcp -p "0.0.0.0:10800"
- 在客户端上使用socks代理无法访问百度,提示域名无法解析
$ curl -vv --socks5 192.168.54.130:10800 www.baidu.com
- 但是通过ip去访问百度可以正常访问
$ curl -vv --socks5 192.168.54.130:10800 163.177.151.109
(原因是客户端网段无法访问公网,客户端的DNS也在同网段,所以也是不能解析公网地址的,这样客户端就会提示域名无法解析。socks代理仅提供ip连接,不提供域名解析,解析域名只能通过客户端的DNS去解析)
- 有一种情况是可以通过socks代理解析的,那就是在socks5后面加个 h 参数,h参数表示使用代理去解析域名
$ curl -vv --proxy socks5h://192.168.54.130:10800 www.baidu.com
2、客户端可上网篇
两台虚拟机:
代理服务器:1台1张网卡(NAT或桥接)
客户端:1台1张网卡(NAT或桥接)
- 在代理服务器上使用代理命令
proxy socks -t tcp -p "0.0.0.0:10800"
在客户端上需要先配置iptables规则,安装iptables
- centos7默认没有安装iptables service,安装和开启iptables
$ yum install -y iptables-services.x86_64
$ systemctl start iptables.service
-
为了测试通过代理去访问百度,需要先在iptables上禁止访问百度域名,否则无法测试代理的效果。
-
添加iptables规则(表示192.168.3.0/24这个网段去访问所有的80端口都是拒绝的,客户端是192.168.3.68)
$ iptables -A OUTPUT -p tcp -s 192.168.3.0/24 --dport 80 -j REJECT
配置完拒绝规则后,测试一下效果。访问百度域名已经不通了,但是dns解析是正常的
我们在到客户端上使用socks代理访问百度,可以正常访问(这里没有带上 h 参数也能访问,因为DNS本身就可以解析公网域名)
$ curl -vv --socks5 192.168.3.22:10800 www.baidu.com