【問題】BrazilFW Bridged mode ~~Linux_xp大大救我啊



贊助商連結


espresso
2006-10-30, 10:37 AM
小的是小公司的MIS,每個 Branch-office 的PC數量滿多的
聽了Linux_xp大大的推荐,改用 BrazilFW 2.28後。
現在這台Router穩的不得了,又快又穩。
害小的把價值好幾萬的舊Router全部拿去疊疊樂作古了

現在有兩個問題想請教各位大大
1. BrazilFW 應該如何設定 Persistant Routing Table?
例如 輸入 router add -net xxx.xxx.xxx.xxx netmask 255.255.255.255 gw 192.168.1.6 ,當Route reboot 後就會失效,請問該如何解決?
2. Bridged mode應該如何設定呢?因為小的有去逛過官網,不過在討論區也沒看到相關說明。請問有沒有可以參考的網址或文件?

贊助商連結


espresso
2006-10-30, 10:38 AM
1. BrazilFW 應該如何設定 Persistant Routing Table?
例如 輸入 router add -net xxx.xxx.xxx.xxx netmask 255.255.255.255 gw 192.168.1.6 ,當Route reboot 後就會失效,請問該如何解決?

受人指導自問自答,直接在 rc.local 寫入就可以了

但是 Bridged mode, 誰來救我啊? plz~~
因為公司的MPLS VPN 需要做 QoS .....

DarkSkyline
2006-11-02, 10:09 PM
"Linux_xp"大大快出來解救他吧~:D

espresso
2006-11-02, 10:26 PM
"Linux_xp"大大快出來解救他吧~:D
其他大大願意解救也拜託趕緊伸個援手吧 :boldred:
PLZ~~~~~

linux_xp
2006-11-03, 10:43 AM
受人指導自問自答,直接在 rc.local 寫入就可以了

但是 Bridged mode, 誰來救我啊? plz~~
因為公司的MPLS VPN 需要做 QoS .....


重新導向

1.
需要 ipruote2 這個套件
BrazilFW 沒有內建,需另外安裝 add-ons

下載點:
http://www.brazilfw.com.br/forum/viewtopic.php?t=56436

add-one 檔名:
ip.tgz

安裝後,就有 ip 這個指令可以使用
這是 Linux 作 static 路由,非常重要的一個指令

※注意事項:
BrazilFW 原先就有 ip 這個指令,但它不是 iproute2
新增 iproute2 套件的 add-ons 後
如欲使用,必須指定絕對路徑 /user/sbin/ip

如果不指定絕對路徑的話
會跑到 BrazilFW 原先那個 busybox 嵌入式核心提供的 ip 指令



2.
我之前弄過 Transparent Proxy 的重心導向
原理是相同的,提供「範例」 作參考

因為 BrazilFW 是沒有辦法生出 proxy 的 (目前沒辦法)
所以若要 porxy 就必須另外架一台
但另外架設的,要如何弄成強制穿透 Transparent 型態
關鍵就在「重新導向」


# Transparent Proxy 重新導向
# ------------------------------------------------------------------------------

# 給 http 封包貼標籤
iptables -t mangle -A PREROUTING -i eth0 -s ! 192.168.0.1 -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 8080 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 3128 -j MARK --set-mark 2


# iproute2 多重路由,抓出有貼標籤的封包,送到指定路由表,進行路由回傳 squid 主機
/usr/sbin/ip rule add fwmark 2 table 80
/usr/sbin/ip route add default via 192.168.0.1 dev eth0 table 80
/usr/sbin/ip route flush cache

# 關閉核心 ipv4 的 icmp 重新導向功能 (路由必須)
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects

# -------------------------------------------------------------------------------

# 另一台 proxy 主機的設定,port 重新導向
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128


原理說明:
---------------------------------------
1.用 iptables 抓出特定服務的封包,給予貼標籤
特定服務:例如:proxy 或 vpn

iptables -t mangle -A PREROUTING -i eth0 -s ! 192.168.0.1 -p tcp --dport 80 -j MARK --set-mark 2

這一段的意思:
上傳方向,封包由對外網卡出去,來源「不是」192.168.0.1,目標埠 80,貼標籤2

192.168.0.1 是我的 proxy 主機IP

Q.為甚麼前面要加驚嘆號 ! 表示「反」「不是」「非」呢?

因為等一下凡是有貼標籤的封包,都不會送出去
會重新導向到內部區網的另一台主機,例如 proxy 或 vpn 主機
然後 proxy 或 vpn 主機處理後再把封包真正送出去

但這邊會有一個問題
porxy 或 vpn 主機,送出封包到 internet 時,一樣是得經過 閘道器
而閘道器又把封包貼標籤,又送回來,豈不是沒完沒了
因此為了避免無窮迴圈,必須指定「不是」proxy / vpn 主機,才貼標籤


2.用 ip 偵測有標籤的封包,抓到後送到指定路由表處理

/usr/sbin/ip rule add fwmark 2 table 80

# 新增一個路由規則,當偵測到封包貼有「標籤號碼 2」,送到「路由表 80 號」進行處理

所謂的標籤號碼,是與前面 iptables 給封包貼標籤,相對應的號碼

Linux 的 iproute2 靜態路由機制,提供了 255 個路由表
也就是說可以設定 255 組靜態路由
(其中編號 254、255 已被使用,實際可自訂為 253 組)

送到「路由表 80 號,」,這個數字可自選
以不衝到其它已使用,及容易識別為主
可用範圍為 1~253


/usr/sbin/ip route add default via 192.168.0.1 dev eth0 table 80

# 給路由表 80 號,指定一個預設閘道:192.168.0.1,指定使用 eth0 傳送

一個路由表,可以寫入很多路由規則
若封包不符合任何規則,就直接送預設閘道器

這邊就不指定規則了
所有封包只要進了 80號路由表,直接網它的預設閘道送
也就是 192.168.0.1 這台主機 (porxy 或 vpn)

因為一台當路由器的主機,它可能會有很多網卡介面 (網卡插孔)
主機網路線插哪一孔,就只能由那一孔通信,這是電線的物理限制
所以同時也要指定網卡介面,例如:eth0


/usr/sbin/ip route flush cache

# 清空路由快取,使用路由設定立刻生效

一般在路由快取的作用下,要生效需要蠻長時間
所以改完要使其立刻生效,才能知道行不行


VPN 有很多種通訊協定

如果是 PPTP 協定的話,它使用的 port 為:
------------------------------------------
tcp 1723
tcp 1512

-p 47 (GRE 封包)
-------------------------------------------

比較特殊的是 -p 47 GRE 封包,其語法範例:
iptables -A INPUT -p 47 -j ACCEPT

就是 -p 後面,直接數字 47

:)

espresso
2006-11-03, 11:17 AM
最近一直拜讀與研究 linux_xp 大大之前的大作,獲益匪淺 :jump:
連晚上作夢都會夢到這名字 :D

不過因為對 linux 不熟析,(很抱歉小的是M$派 :p )
所以那個 Bridged mode 會趕緊好好研究一下,再來報告。

當務之急有個新想法,
就是把 BrazilFW 直接當Router來管QoS,不知道可行嗎?
例如:
LAN: 192.168.1.0/24
MPLS: 192.168.8.0/24
把 BrazilFW WAN 也改成 private ip, 這樣不知道有沒有其他問題?

espresso
2006-11-03, 11:20 AM
另外在 【教學】Coyote Linux 頻寬管制 (QoS) 設定教學 (http://www.pczone.com.tw/showthread.php?t=116666)
有提問:

請教一下linux_xp大大,
如果我把您曾經提供的 gw firewall script, 其中這一段

## 以下開始設定防火牆規則

# 設定 INPUT、OUTPUT、FORWARD 鏈預設的過濾原則, 凡封包
# 不符合各鏈中的規則, 皆予以拋棄
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# 允許流經 lookback 介面的封包進出
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i ! lo -s 127.0.0.0/8 -j DROP
iptables -A OUTPUT -o ! lo -d 127.0.0.0/8 -j DROP

# 新增一個名為 BADPKT 的新鏈
iptables -N BADPKT

# 丟棄所有進入 BADPKT 鏈的封包
iptables -A BADPKT -j DROP

# 將可疑封包交由 BADPKT 鏈處理 (不可能出現的 TCP 旗標狀態封包)
iptables -A INPUT -m state --state INVALID -j BADPKT
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j BADPKT
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j BADPKT
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j BADPKT
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j BADPKT
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j BADPKT
iptables -A FORWARD -m state --state INVALID -j BADPKT
iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j BADPKT
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j BADPKT
iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j BADPKT
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j BADPKT
iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j BADPKT
iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j BADPKT
iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j BADPKT
iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j BADPKT
iptables -A FORWARD -p tcp --tcp-flags ALL FIN,URG,PSH -j BADPKT
iptables -A FORWARD -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j BADPKT
iptables -A FORWARD -p tcp --tcp-flags ALL ALL -j BADPKT
iptables -A FORWARD -p tcp --tcp-flags ALL FIN -j BADPKT

# 允許已建立連線和回應的封包通過
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
直接 貼到 BrazilFW 2.28 Custom Firewall Rules 裡面,
也就是 /etc/coyote/firewall.local

請問這樣有效用嗎?謝謝!