OpenBSD PF &
之橋接模式﹝Bridge Mode﹞+ Squid with Transparent proxying
Description:
前一陣子當我在玩 FreeBSD 時,曾經有嘗試過
Ipfw + Bridge + Transparent proxying + Squid
可惜失敗了,之後因為忙碌就把它擺到一旁,因此就再也沒有碰它了,最近有位網友 Mike
剛好也碰到這樣的問題,他問我是否 Transparent
proxying 只能建構於 NAT 架構下,而不能用在單純的 Bridge 模式下?我的答案是當然是不限制只架構於 NAT 下,單純的
Bridge Mode 下也可行,想一想 Squid 都可獨立執行,那麼怎麼可能會受限 NAT
模式下呢?所以我決定再測試一次,不過手邊已經沒 FreeBSD 的機器可測試,因為最近都在玩 OpenBSD 所以就改用 OpenBSD
來測試好了,果然跟我想的是一樣,非 NAT 模式下還是可以跑 Squid with Transparent proxying 。
Environment :
WAN
ext_if
int_if
LAN
88.88.88.0/24
88.88.88.1
88.88.88.2
88.88.88.0/24
E1 -------------------------------
fxp0 [ OpenBSD ] de0 ----- (
3com Switch 24 port ) ----- [ Computer
Group ]
Setp
1.
Bridge
Mode 之設定:
確認 PF 防火牆的基本運做是否都打開:
#vi /etc/rc.conf
PF=YES
#vi
/etc/sysctl.conf
net.inet.ip.forwarding=1
開始設定 Bridge Mode,讓兩片網卡通透,並且各自設定一個 IP :
#vi
/etc/hostname.fxp0
inet 88.88.88.1 255.255.255.0 NONE
#vi /etc/hostname.de0
inet 88.88.88.2 255.255.255.255
NONE #
同一網段內的 IP ,第二片網卡的 IP Mask
不能設
255.255.255.0 要改 255.255.255.255
#vi bridgename.bridge0
add fxp0
add de0
up
Setp
2.
Squid 之設定:
安裝 Squid 我用 pkg_add 安裝 因為 ports 安裝一直出現錯誤所以就改用 pkg_add :
#setenv
PKG_PATH ftp://openbsd.csie.nctu.edu.tw/pub/OpenBSD/3.5/packages/i386/
#pkg_add
${PKG_PATH}squid-2.5.STABLE5.tgz #
squid 的主程式
#pkg_add
${PKG_PATH}transproxy-1.4.tgz # 讓 squid
具備 transparent 能力的套件
設定 #vi
/etc/squid.conf 下的的環境:
http_port
88.88.88.2:3128 # 這一行很重要一定要將 IP 設為對內 int_if 那片網卡上的
IP
acl
our_networks src 88.88.88.0/24
acl msn dstdomain .msn.com
#
http_access deny msn
http_access allow our_networks
#
visible_hostname OBSD.ntut.idv.tw
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
初始化 Squid 環境:
#/usr/local/sbin/squid -z
重新讀取載入 Squid 之設定檔:#/usr/local/sbin/squid
-k reconfigure
設定開機自動啟動 Squid : # vi /etc/rc.local
if [ -x
/usr/local/sbin/squid ]; then
echo -n '
squid'; /usr/local/sbin/squid
fi
Setp
3.
PF 之設定:
#vi /etc/pf.conf
# macros
ext_if = "fxp0"
int_if = "de0"
# rdr
rdr on $int_if inet proto tcp from
any to any port www -> 88.88.88.2 port 3128 #
這行也是要將 IP 設為對內那片網卡 IP
# filter rules
pass in all
pass out all
#pfctl -f
/etc/pf.conf
#reboot
參考資料:
http://www.benzedrine.cx/transquid.html