我在 Windows 環境中運行 Linux 盒子(Lubuntu 12.04),其中 pac 檔案用於配置網路存取。
proxy.pac 檔:
function FindProxyForURL(url, host){
var proxy_yes = "PROXY xxx.xxx.xxx.xxx:8000";
var proxy_no = "DIRECT";
if (shExpMatch(url, "*//yyy.*")) { return proxy_no; }
if (shExpMatch(url, "*//zzz.zzz.*")) { return proxy_no; }
if (shExpMatch(url, "*foo.com*")) { return proxy_no; }
//Proxy anything else
return proxy_yes;
}
據我所知,Lubuntu 沒有全域代理系統。
我沒有試圖搞亂像 HTTP_PROXY 這樣只有某些程式尊重的 shell 變數(例如,不是 Chromium),而是認為 iptables 可以用於透過代理透明地重定向所有流量,從而有效地實現全域代理。
這可能嗎?
編輯:我應該澄清我不是管理員,也不是試圖設定代理。代理程式已經設定完畢,要讓機器連接到互聯網,需要啟用自動代理設定並將其指向上面的 pac 檔案。直接連線被阻止。
我希望使用 iptables 透過代理程式自動路由流量,而不是單獨配置每個應用程式。
答案1
我承認我以前從未使用過Lubuntu
,但我懷疑它只是Ubuntu
在虛擬機器中運行的衍生版本。依賴 javascript 進行代理是一件非常愚蠢的事情,因為在許多情況下它很容易被繞過或完全被忽略......這最終破壞了使用代理的優勢。
我首先使用設定適當的代理系統squid
。對於衍生產品,儲存庫中ubuntu
有一個可以使用或輕鬆安裝的套件。安裝後,先編輯並新增或修改以下您認為合適的設定:squid
apt
synaptic
/etc/squid/squid.conf
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
acl lan src 192.168.1.1 192.168.2.0/24
http_access allow localhost
http_access allow lan
您可以使用更多配置選項,但這些對於大多數用途來說都是一個很好的開始。之後,下一步只需在預設路由器中設定 iptables 並將DNAT
流量重定向到squid
代理即可。
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
當然,您希望將其放入某種啟動腳本中,以便每次路由器啟動時都套用規則。此外,請記住,這不會影響https
流量,因為https
其故意設計為不允許流量被代理(或被中間人攔截/解密等)。如果您想過濾掉流量(到可疑網站),您也可以拋出SquidGuard
混合。
可以代理 https 流量,但強烈不建議這樣做。如果您確實想實現該功能,這裡有一個很好的指南這裡。
答案2
這就是我最終所做的:
- 設定環境變數
ALL_PROXY
、HTTP_PROXY
、HTTPS_PROXY
、FTP_PROXY
和NO_PROXY
中的/etc/environment
。 - 為 apt in 設定 http、https 和 ftp 代理程式
/etc/apt/apt.conf.d/80proxy
(使用語法Acquire::http::proxy "http://xxx.xxx.xxx.xxx:8000";
) - 使用代理鏈對於任何不尊重環境變數並且沒有內建代理支援的程式。