日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

用ipfilter在動態(tài)ip環(huán)境下做重定向

from http://www.bsdbase.com/doc/ipfilter-dynamic-ip-rdr.txt

用ipfilter在動態(tài)ip環(huán)境下做重定向
阿土 tutu@bsdbase.com
2002.11.28

歡迎斧正,轉(zhuǎn)載必須保留版權(quán)信息

在ipfilter的nat規(guī)則中,如果出口ip地址是動態(tài)ip,比如PPPoE撥號或DHCP,那么可以使用類似
map tun0 192.168.0.0/24 -> 0.0.0.0/32 的語法進行地址(端口)映射;可是類似
rdr tun0 0/32 port rtsp -> 192.168.2.100 port rtsp tcp/udp這樣的語法卻是不對的,因為rdr
規(guī)則要求第三個域是ip包的目的地址,通常是該出口網(wǎng)卡的地址,顯然,當別人訪問你的機器的時候tcp/udp包的目的地址是你的當前地址,而不是
0/32,所以,rdr tun0 0/32 ...這樣的規(guī)則是不會生效的,你必須以該網(wǎng)卡的當前ip地址來做這個規(guī)則;
ipfilter本身沒有提供這樣的定義使得我們可以方便的做這樣的規(guī)則,下面是我做的腳本,用來動態(tài)的獲得
當前出口網(wǎng)卡地址,并一次刷新ipfilter規(guī)則 。

1 。內(nèi)核中編譯ipfilter的支持,不能讓ipfilter以模塊的形式載入;
因為我沒有在/etc/rc.conf中指定ipfilter_enable="yes";
2 。編制如下shell script;

#!/bin/sh
#vi /usr/local/sbin/ipf.sh
#此腳本用來刷新ipf規(guī)則;
#注意/etc/ipf.rules是根據(jù)/etc/ipf.rules.template這個模板自動生成的;
#所以,如果你要改規(guī)則,應(yīng)該改/etc/ipf.rules.template這個模板;
#For dynamic ip ipf rules
#$EXT_NIC is the internet connected NIC
#$EXT_ADDR is the internet connected NIC ADDRESS.

#get dynamic nic.
#獲得默認路由經(jīng)過的網(wǎng)卡,即所謂的外網(wǎng)網(wǎng)卡;
EXT_NIC=`netstat -arn | grep "default>" | awk "{print $6 }"`
if [ -z $EXT_NIC ];
then
echo "ERROR default gateway NO found !!!"
exit 1
else
export EXT_NIC
#get dynamic nic and ip.
#獲得外網(wǎng)卡地址;
EXT_ADDR=`ifconfig $EXT_NIC | grep "inet>" | awk "{print $2}"`
if [ -z $EXT_ADDR ];
then
echo "ERROR:EXT_ADDR NO found !!!"
exit 1
else
export EXT_ADDR
#根據(jù)上述信息參照模板生成規(guī)則;
echo "#NOTE:" >/etc/ipf.rules
echo "#DON"T modify /etc/ipf.rules for your ipf rules ,Just modify /etc/ipf.rules.template instance !!!" >>/etc/ipf.rules
echo "#Read /usr/local/sbin/ipf.sh for detail." >>/etc/ipf.rules
echo "#." >>/etc/ipf.rules
echo "#ReFlashed date:`date`." >>/etc/ipf.rules
sed s/$EXT_NIC/$EXT_NIC/g /etc/ipf.rules.template >/etc/ipf.rules.nic
sed s/$EXT_ADDR/$EXT_ADDR/g /etc/ipf.rules.nic >>/etc/ipf.rules
#刷新規(guī)則;
/sbin/ipf -Fa
/sbin/ipf -y -f /etc/ipf.rules
fi
fi
#end /usr/local/sbin/ipf.sh

#!/bin/sh
#vi /usr/local/sbin/ipnat.sh
#此腳本用來刷新ipnat規(guī)則;
#注意/etc/ipnat.rules是根據(jù)/etc/ipnat.rules.template這個模板自動生成的;
#所以,如果你要改規(guī)則,應(yīng)該改/etc/ipnat.rules.template這個模板;
#For dynamic ip ipnat rules
#$EXT_NIC is the internet connected NIC
#$EXT_ADDR is the internet connected NIC ADDRESS.

#get dynamic nic.
#獲得默認路由經(jīng)過的網(wǎng)卡,即所謂的外網(wǎng)網(wǎng)卡;
EXT_NIC=`netstat -arn | grep "default>" | awk "{print $6 }"`
if [ -z $EXT_NIC ];
then
echo "ERROR default gateway NO found !!!"
exit 1
else
export EXT_NIC
#get dynamic nic and ip.
#獲得外網(wǎng)卡地址;
EXT_ADDR=`ifconfig $EXT_NIC | grep "inet>" | awk "{print $2}"`
if [ -z $EXT_ADDR ];
then
echo "ERROR:EXT_ADDR NO found !!!"
exit 1
else
export EXT_ADDR
#根據(jù)上述信息參照模板生成規(guī)則;
echo "#NOTE:" >/etc/ipnat.rules
echo "#DON"T modify /etc/ipnat.rules for your nat rules ,Just modify /etc/ipnat.rules.template instance !!!" >>/etc/ipnat.rules
echo "#Read /usr/local/sbin/ipnat.sh for detail." >>/etc/ipnat.rules
echo "#." >>/etc/ipnat.rules
echo "#Reflashed date:`date`." >>/etc/ipnat.rules
sed s/$EXT_NIC/$EXT_NIC/g /etc/ipnat.rules.template >/etc/ipnat.rules.nic

推薦閱讀