私有Tor网络搭建 #
1.安装Docker #
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2.建立桥接网络 #
docker network create --driver bridge --subnet 172.10.1.0/16 --gateway 172.10.1.0 tor_net
- –driver bridge 表示使用桥接网络
- –subnet 172.10.0.0/16 表示子网ip(分配范围1~254)
- –gateway 172.10.1.0 表示网关
- tor_net 表示网络名
3.建立节点模板 #
1.拉取ubuntu镜像,建立容器
docker pull ubuntu
docker run -itd --name tor_1 --network=tor_net ubuntu /bin/bash
- -itd == -i -t -d
- -d 参数默认不会进入容器
- -i 交互式操作
- -t 终端
- –name 名字
- /bin/bash 放在镜像名后面的是命令,bash路径
2.编译tor源码
先在主机上拉取tor源码,然后拷贝给容器
git clone https://github.com/torproject/tor
docker cp ./tor tor_1:/root
进入容器
docker attach tor_1
修改源
sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
apt clean
apt-get update -y
安装必要的包
apt-get install -y neovim git curl net-tools autotools-dev automake autoconf libtool make gcc libevent-dev libssl-dev zlib1g zlib1g-dev
apt-get --no-install-recommends -y install asciidoc
apt-get -y install docbook-xml docbook-xsl
编译tor
git config --global --add safe.directory /root/tor
cd /root/tor/
./autogen.sh
./configure
make
make install
# 将来会用到的
mkdir /etc/tor
mkdir /etc/tor/tor_data
mkdir /etc/tor/tor_log
exit
保留镜像
# 导出镜像
docker export tor_1 > tor.tar
# 导入镜像
docker import - tor < tor.tar
# 查看镜像
docker images
# 创建新容器
docker run -it --name tor_da1 --network=tor_net tor /bin/bash
4.配置DA #
进入容器
docker attach tor_da1
1.生成节点密钥和指纹
tor --list-fingerprint --orport 5000 --dirserver "DA 172.10.0.1:7000 ffffffffffffffffffffffffffffffffffffffff" --datadirectory /etc/tor/tor_data
2.生成DA密钥和证书
tor-gencert --create-identity-key -m 12 -a 172.10.0.1:7000 \
-i /etc/tor/tor_data/keys/authority_identity_key \
-s /etc/tor/tor_data/keys/authority_signing_key \
-c /etc/tor/tor_data/keys/authority_certificate
3.配置torrc
注 RA的配置文件这里同样填写要连接的DA的这两个
nvim /usr/local/etc/tor/torrc
v3ident填写
cat /etc/tor/tor_data/keys/authority_certificate | grep fingerprint
节点指纹填写
cat /etc/tor/tor_data/fingerprint
/usr/local/etc/tor/torrc
NickName DA
Address 172.10.0.1
# LOG 文件
Log notice file /etc/tor/notice.log
Log info file /etc/tor/info.log
Log debug file /etc/tor/debug.log
## 目录服务器设置
AuthoritativeDirectory 1
## Tor将生成第3版网络状态
V3AuthoritativeDirectory 1
ContactInfo auth0@test.test
# 存储工作数据
DataDirectory /etc/tor
## 关键端口
# 不希望通过SOCKS连接应用程序
SocksPort 0
# OrPort监听Tor连接
OrPort 5000
# DirPort监听目录服务 在此端口上通告目录服务
DirPort 7000
# 调试端口
ControlPort 6666
## 指定自己的目录服务器
# 1 authority_certificate | grep fingerprint
# 2 fingerprint
DirAuthority DA orport=5000 no-v2 v3ident=583A462E5CADC4EC5C3212FDAC8F4A028A8E1584 172.10.0.1:7000 DFDA9F10DD63D43B77DFE7FB896310CAD265318E
## 测试 Tornetwork
TestingTorNetwork 1
TestingV3AuthInitialVotingInterval 300
TestingV3AuthInitialVoteDelay 20
TestingV3AuthInitialDistDelay 20
TestingDirAuthVoteGuard *
TestingMinExitFlagThreshold 0
## 这些配置是为了快速上线,避开一些对稳定性的限制
RunAsDaemon 1 #后台运行
AssumeReachable 1
#响应SIGINT信号,立即关闭
ShutdownWaitLength 0
# Tor进程启动前必须可用的最小文件描述符数。
ConnLimit 60
#出口策略 不作为出口 拒绝一切出口流量
ExitPolicy reject *:*
# 安全设置与调试设置
ProtocolWarnings 1
SafeLogging 0
DisableDebuggerAttachment 0
5.配置中继节点和客户端 #
仅需要生成节点密钥和指纹,创建多个docker容器
docker run -it --name tor_ra1 --network=tor_net tor /bin/bash
# 容器内执行
tor --list-fingerprint --orport 5000 --dirserver "DA 172.10.0.1:7000 ffffffffffffffffffffffffffffffffffffffff" --datadirectory /etc/tor/tor_data
配置torrc
nvim /usr/local/etc/tor/torrc
NickName relay*
Address 172.10.0.*
# LOG 文件
Log notice file /etc/tor/notice.log
Log info file /etc/tor/info.log
Log debug file /etc/tor/debug.log
# 存储工作数据
DataDirectory /etc/tor
## 关键端口
# 后续代理访问需要的端口
SocksPort 9050
# OrPort监听Tor连接
OrPort 5000
# 调试端口
ControlPort 6666
## 指定自己的目录服务器
# 1 authority_certificate | grep fingerprint
# 2 fingerprint
DirAuthority DA orport=5000 no-v2 v3ident=583A462E5CADC4EC5C3212FDAC8F4A028A8E1584 172.10.0.1:7000 DFDA9F10DD63D43B77DFE7FB896310CAD265318E
## 测试 Tornetwork
TestingTorNetwork 1
TestingDirAuthVoteExit *
TestingDirAuthVoteHSDir *
TestingDirAuthVoteGuard *
TestingMinExitFlagThreshold 0
## 这些配置是为了快速上线,避开一些对稳定性的限制
RunAsDaemon 1 #后台运行
AssumeReachable 1
#响应SIGINT信号,立即关闭
ShutdownWaitLength 0
# Tor进程启动前必须可用的最小文件描述符数。
ConnLimit 60
#出口策略 可以作为出口
ExitRelay 1
ExitPolicy accept *:*
# 安全设置与调试设置
ProtocolWarnings 1
SafeLogging 0
DisableDebuggerAttachment 0
6.网络测试 #
启动容器中的tor #
docker exec da1 tor
docker exec ra1 tor
docker exec ra2 tor
docker exec ra3 tor
使用代理 #
代理 socks ip:9050
curl --proxy socks://127.0.0.1:9050 www.baidu.com