我正在使用squid版本3.5
我的目标是使用docker容器为每个用户创建一个透明(或称为拦截)代理,因此我不需要在用户中配置手动代理设置。
所以这就是我想要的:
- 访客登录系统(完成)
- 登录后,系统记录了ID和IP(完成)
- 在其他机器(我称之为“服务器泊坞窗”)中,我创建了一个容器,其中包含--name ID和IP以及 - 来自guest虚拟机的特定端口 (完成)
- 为具有特定IP和PORT的用户创建iptables(已完成,但我不确定)
- 如果客人想要连接到互联网,则访客必须通过该容器(尚未)
醇>
示例:
ID:5114100100
IP:10.151.36.227
IP服务器泊坞:10.151.36.134
港口:9001
第一步:我创建一个图像
iptables -t nat -A PREROUTING -i wlp3s0 -s 10.151.36.123 -p tcp --dport 80 -j DNAT --to 10.151.36.38:9001
iptables -t nat -A PREROUTING -i wlp3s0 -s 10.151.36.123 -p tcp --dport 443 -j DNAT --to 10.151.36.38:9001
第二步:我用iptables创建规则
visible_hostname X450LD
http_port 3128
http_access allow all
首先是我的squid.conf
HTTP Proxy 10.151.36.38
Port 9001
然后,如果我在浏览器客户端设置代理设置手册(我使用firefox)
acl SUBNETAJK src 10.151.36.0/24
acl client1 src 10.151.36.227
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 445 # windows update
acl CONNECT method CONNECT
http_port 3128
http_port 3129 intercept
http_access allow SUBNETAJK
http_access deny all
http_access deny !Safe_ports
never_direct allow all
cache_mem 64 MB
cache_swap_low 98
cache_swap_high 99
shutdown_lifetime 1 second
visible_hostname X450LD
它工作正常
现在问题在于:
我想透明化。我尝试了每个教程/ github其他用户,并在容器中制作squid.conf,如下所示:
--publsh to 3129
我改变了docker run
。我再次跑docker run -d -it --net bridge --name 5114100123_10.151.36.227 --publish 9001:3129 fourirakbar/debian-squid:version1
:
iptables -t nat -L
我没有改变iptables的规则。如果我在服务器泊坞窗中执行Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere anywhere ADDRTYPE match dst-type LOCAL
DNAT tcp -- 10.151.36.227 anywhere tcp dpt:https to:10.151.36.134:9001
DNAT tcp -- 10.151.36.227 anywhere tcp dpt:http to:10.151.36.134:9001
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 anywhere
MASQUERADE all -- 172.18.0.0/16 anywhere
MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:3129
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- anywhere anywhere
RETURN all -- anywhere anywhere
DNAT tcp -- anywhere anywhere tcp dpt:9001 to:172.17.0.2:3129
,请执行以下操作:
elearning.if.its.ac.id
当我尝试打开1524042518.250 0 172.17.0.1 TCP_DENIED/403 4240 GET http://elearning.if.its.ac.id/ - HIER_NONE/- text/html
1524042518.293 0 172.17.0.1 TCP_DENIED/403 4341 GET http://x450ld:3128/squid-internal-static/icons/SN.png - HIER_NONE/- text/html
1524042525.444 201 172.17.0.1 TCP_DENIED/403 4192 GET http://monta.if.its.ac.id/ - HIER_NONE/- text/html
1524042525.521 0 172.17.0.1 TCP_DENIED/403 4225 GET http://x450ld:3128/squid-internal-static/icons/SN.png - HIER_NONE/- text/html
1524042525.580 0 172.17.0.1 TCP_DENIED/403 4187 GET http://monta.if.its.ac.id/favicon.ico - HIER_NONE/- text/html
之类的http网站时,出现错误拒绝访问。我尝试手动设置代理设置,我也有同样的错误。
更新acces.log:
mongoexport --db db_name --collection collection_name | sed '/"_id":/s/"_id":[^,]*,//' > file_name.json