-
Notifications
You must be signed in to change notification settings - Fork 2
Home
SgrAlpha edited this page Oct 3, 2019
·
19 revisions
搭建透明代理服务器的目的,主要是希望用它作为跳板(jumpbox),为内网的机器提供代理服务,同时解决潜在的DNS污染问题,这样内网的机器无需任何配置即可实现访问真・外网。
利用一台有两张网卡的机器,一张用于访问外网,一张用于内网,在上面假设DNS服务,并利用iptables将流量转发到外部代理上。
- 硬件
- 光猫,主要用于PPPoE拨号访问外网,不是光纤的话普通的也可以。
- 一台有两张网卡的机器,可以是小主机,也可以是其他闲置的旧电脑。笔者使用的是一台2011年的Mac Mini主机,Intel i5 2.3GHz + 8G 内存,其优点是性能其他路由,个头小,几乎可以放在任何地方,自带一个千兆网口和一个Thundbolt口,可以通过转接器扩展为两个千兆网口。
- 内网交换机/有线路由器/无线路由,任意一个即可。
- 内网主工作站,笔记本或者台式机一台。
- 六类网线若干
- 软件
- 服务器端
-
shadowsocks-libev,主要使用其中的
ss-server,可以自行搭建,也可以购买或者使用他人提供的。
-
shadowsocks-libev,主要使用其中的
- 跳板
- Ubuntu Server 18.04.3 LTS。
-
shadowsocks-libev,主要使用其中的
ss-redir。 - dnsmasq,用于缓存DNS以及为内网机器提供DHCP服务。
- overture,主要用来解决DNS污染问题。
- GFW list,潜在的被污染域名列表。
- 国内IP列表
- 服务器端
- 跳板机用于访问外网的网口 -> 光猫的LAN口(注意区分百兆口和千兆口,优先使用千兆口)。
- 跳板机用于内网的的网口 -> 内网交换机/有线路由器/无线路由的WAN口。
这部分需要在跳板机的命令行里进行操作,后面以 Ubuntu Server 18.04 为例,低版本或者桌面版可能会有些许不同,但基本原理类似。
运行 ifconfig -a 查看网卡信息,应该会看到三个或者以上的网卡,名称可能会不同,需要自行区分:
- enp2s0f0,这是连接光猫的网卡,视为外网网卡
- ens9,另一块网卡,视为内网网卡
- lo,本地
在新的 Ubuntu Server 18.04 TLS 中,控制网络组件是一个叫做netplan的东西,与之前大家熟悉的直接编辑/etc/network/interfaces不太一样。其配置文件在 /etc/netplan/ 目录下,通常以数字开头,数字越大权重越大。全新安装的系统通常是有一个配置文件,可以使用:
sudo ls /etc/netplan/列出所有的配置文件,找其中最大的一个编辑,我这里是50-cloud-init.yaml。
sudo vi /etc/netplan/50-cloud-init.yaml将其中的内容替换成:
network:
ethernets:
enp2s0f0:
dhcp4: yes
ens9:
dhcp4: no
addresses: [192.168.3.1/24, ]
version: 2其中对于外网网卡 enp2s0f0 我们使用了DHCP,接受由光猫动态分配的地址;而对于内网网卡 ens9 我们给他分配了一个静态的地址 192.168.3.1,这个地址将会成为内网机器的DHCP服务器地址、网关以及DNS服务器地址。保存之后运行下面的命令可以让配置马上生效:
sudo netplan apply成功之后可以再运行 ifconfig -a 检查是否配置正确。
- 安装
dnsmasq:
sudo apt update && sudo apt install dnsmasq -y- 打开并编辑其配置文件:
sudo vi /etc/dnsmasq.conf- 将内容替换成:
# 默认情况下 dnsmasq 会并发查询所有定义了上游 DNS,这里先改成按照制定顺序
strict-order
# 添加若干上游 DNS 服务器
server=223.5.5.5#53
server=223.6.6.6#53
server=119.29.29.29#53
server=119.28.28.28#53
# 提供 DNS 服务的网卡,通常情况我们不需要为外网提供 DNS 服务,所以打开内网网卡即可
# interface=enp2s0f0 # Public ethernet interface
interface=ens9 # Internal ethernet interface
# 能用来收取 DNS 请求的 IP 地址,这里要加上内网网卡的 IP 和本地 IP
# listen-address=10.1.100.1 # IP from public ethernet interface
listen-address=192.168.3.1 # IP from internal ethernet interface
listen-address=127.0.0.1 # Local IP
# 禁止 dnsmasq 为外网网卡提供 DHCP 服务,否则会干扰外网网卡运行
no-dhcp-interface=enp2s0f0
# 绑定到网卡
bind-interfaces
# 设置 DHCP 服务能够分配的 IP 地址段,需要与 netplan 中的地址在同一个网段
dhcp-range=192.168.3.50,192.168.3.150,24h- 保存并重启服务
sudo systemctl restart dnsmasq.service这时候连接到内网网卡的设备已经可以拿到自动分配的 IP 地址了,但暂时还上不了网。