整体架构
整体架构说明
为电脑 A 提供透明代理
服务器拥有 eth1 网卡与电脑 A 连接
服务器拥有 eth0 网卡可以连接互联网
服务器架构
服务器架构说明
1 为电脑 A 提供透明代理
2 电脑 A 网关指向服务器 eth1
3 利用 iptables 把所有互联网请求 DNS 除外都转发至 redsockets 服务
4 redsockets 可以支持 http, https 代理 (tinyproxy, tproxy 等都无法实现 https 透明代理)
5 redsockets 把电脑 A 请求 (http, https ) 转发至本地 sockets 服务
6 由 socket 服务提供互联网服务
优点
经过测试, 只有 redsockets 支持 https 透明代理
配置简单
rpm下载
由于没有找到可用的 centos7 rpm 版本,因此我自己打了一个 rpm 提供使用
参考下面软件目录结构
redsockets-0.5.0-11.el7.x86_64.rpm 下载链接
rpm 结构说明
# rpm -qlp redsockets-0.5.0-11.el7.x86_64.rpm
/etc/redsockets/redsockets.conf 配置文件
/usr/bin/redsocks 执行明文
/usr/lib/systemd/system/redsockets.service 服务管理文件
软件安装
需求 libevent >= 2.0.21
yum install -y libevent
rpm -ivh redsockets-0.5.0-11.el7.x86_64.rpm
配置文件
/etc/redsockets/redsockets.conf
base {
log_debug = off;
log_info = off;
log = "syslog:daemon";
daemon = on;
redirector = iptables;
}
redsocks {
/*
'local_ip' defaults to 127.0.0.1 for security reasons,
use 0.0.0.0 if you want to listen on every interface.
*/
local_ip = 127.0.0.1;
/*
local_port default 9999
port listen use by redsockets service
web client ex: firefox use to connect to local_port
*/
local_port = 9999;
/*
`ip' and `port' are IP and tcp-port of proxy-server
*/
ip = 127.0.0.1;
port = 7778;
/*
known types: socks4, socks5, http-connect, http-relay
*/
type = socks5;
}
软件使用
systemctl start redsockets 启动
systemctl stop redsockets 关闭
电脑 A
1 dns 指向一个可用 DNS
2 网关指向服务器 eth1 IP 地址
透明代理设定
启动服务后,假设 redsockets 当前监听了 eth1 IP 对应 9999 端口, 执行下面 iptables 命令
允许数据转发
# sysctl -w net.ipv4.ip_forward=1
dns 转发
iptables -t nat -A POSTROUTING -p udp --dport 53 -j MASQUERADE
透明代理
iptables -t nat -A PREROUTING -i eth1 -p tcp ! --dport 53 -j REDIRECT --to-port 9999
iptables -t nat -A PREROUTING -i eth1 -p udp ! --dport 53 -j REDIRECT --to-port 9999