2009年4月17日 星期五

iptables 架 VLAN 與 gateway 實作

最近自己在測試 iptables, 正樂在其中之際, 剛好公司經理與我討論, 他想用一個設備, 用在像是租房子那樣, 有多個user使用, 因為彼此不認識, 所以那個設備最好能夠提供 VLAN 功能, 也就是每戶獨立的區段來使用; 又擔心有些人會佔用到太多的頻寬, 影響到了其他使用者的權利, 因此希望那個設備能有個 QoS(頻寬管理), 把頻寬都切好, 大家都不要搶, 每個人都一樣多..., 要找到這樣的設備通常價格上感覺都有點高. 我卻心裡有了個想法, 又是用到iptables 的時候了, 呵呵~ 物盡其用阿 ^^

想說看看網站上有沒有介紹相關 VLAN 的文章, 結果意外就看到了這篇, 內容看過後雖無實際上測試, 但推敲下覺得實用性還蠻高的. 遂把實作部份擷取出來跟大家分享.

=======================================================



配置文件startup.rc的内容如下:

#设置机器名字
#根据学校名设置灵巧网关的名字
hostname gateway.xxxx

#加载相关模块
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_h323
modprobe ipt_state
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_nat_h323

#设置每个IP最多200个连接,最多20个有效TCP连接
iplimit addlocal 192.168.0.0 255.255.0.0 200 20

#IP地址设置,后面的/28指网络掩码中1的个数,其中eth0接口上要设置多个IP地址
ip addr add 218.22.166.99/28 dev eth0
ip addr add 218.22.166.101/28 dev eth0
ip addr add 218.22.166.102/28 dev eth0
ip addr add 218.22.166.103/28 dev eth0
ip addr add 218.22.166.104/28 dev eth0

ip addr add 192.168.1.254/24 dev eth2
ip link set eth0 up
ip link set eth2 up

#IP路由设置
#缺省路由
ip route add 0/0 via 218.22.166.97
#到校内192.168.*.*的路由,下一跳是主干交换机的IP地址
ip route add 192.168.0.0/16 via 192.168.1.253

#如果要使用dhcp服务器,需要把下面行的注释删掉
dhcpd

配置文件multirun.rc的内容如下:

iptables -F
iptables -t nat -F

#地址转换,设置
# 218.22.166.101 192.168.1.11 WWW
# 102 192.168.1.12
# 103 192.168.1.13
# 104 192.168.1.14
#每个IP需要3条设置
#第一行设置进来的转换
#第二行设置出去的转换
#第三行的意义是,校内用户连接内部服务器对应的公网IP地址时,转换成是从
#灵巧网关上发起的,保证应答包能经过网关
iptables -t nat -A PREROUTING -j DNAT -d 218.22.166.101 --to 192.168.1.11
iptables -t nat -A POSTROUTING -j SNAT -o eth0 -s 192.168.1.11 --to 218.22.166.101
iptables -t nat -A POSTROUTING -j SNAT -s 192.168.0.0/16 -d 192.168.1.11 --to 192.168.1.254

iptables -t nat -A PREROUTING -j DNAT -d 218.22.166.102 --to 192.168.1.12
iptables -t nat -A POSTROUTING -j SNAT -o eth0 -s 192.168.1.12 --to 218.22.166.102
iptables -t nat -A POSTROUTING -j SNAT -s 192.168.0.0/16 -d 192.168.1.12 --to 192.168.1.254

iptables -t nat -A PREROUTING -j DNAT -d 218.22.166.103 --to 192.168.1.13
iptables -t nat -A POSTROUTING -j SNAT -o eth0 -s 192.168.1.13 --to 218.22.166.103
iptables -t nat -A POSTROUTING -j SNAT -s 192.168.0.0/16 -d 192.168.1.13 --to 192.168.1.254

iptables -t nat -A PREROUTING -j DNAT -d 218.22.166.104 --to 192.168.1.14
iptables -t nat -A POSTROUTING -j SNAT -o eth0 -s 192.168.1.14 --to 218.22.166.104
iptables -t nat -A POSTROUTING -j SNAT -s 192.168.0.0/16 -d 192.168.1.14 --to 192.168.1.254

#其他出去的转换,都转化成从网关的IP出去的
iptables -t nat -A POSTROUTING -j SNAT -o eth0 -s 192.168.0.0/16 --to 218.22.166.99

#IP包过滤设置
#首先允许所有建立的连接
iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A FORWARD -j ACCEPT -p icmp

#www服务器,允许连接TCP80端口,其他的被拒绝,并记录日志
#记录日志时每分钟最多记录10条日志
iptables -A FORWARD -j ACCEPT -p tcp -d 192.168.1.11 --dport 80
iptables -A FORWARD -j LOG -d 192.168.1.11 -m limit --limit 10/min --log-prefix " WWW "
iptables -A FORWARD -j REJECT -d 192.168.1.11

#mail服务器
iptables -A FORWARD -j ACCEPT -p tcp -d 192.168.1.12 --dport 25
iptables -A FORWARD -j ACCEPT -p tcp -d 192.168.1.12 --dport 80
iptables -A FORWARD -j ACCEPT -p tcp -d 192.168.1.12 --dport 110
iptables -A FORWARD -j ACCEPT -p tcp -d 192.168.1.12 --dport 143
iptables -A FORWARD -j LOG -d 192.168.1.12 -m limit --limit 10/min --log-prefix " mail "
iptables -A FORWARD -j REJECT -d 192.168.1.12

#192.168.1.13
iptables -A FORWARD -j ACCEPT -p tcp -d 192.168.1.13 --dport 80
iptables -A FORWARD -j LOG -d 192.168.1.13 -m limit --limit 10/min --log-prefix " 1.13 "
iptables -A FORWARD -j REJECT -d 192.168.1.13

#192.168.1.13
iptables -A FORWARD -j ACCEPT -p tcp -d 192.168.1.14 --dport 80
iptables -A FORWARD -j LOG -d 192.168.1.14 -m limit --limit 10/min --log-prefix " 1.14 "
iptables -A FORWARD -j REJECT -d 192.168.1.14

4.DHCP配置
使用DHCP可以简化网络的管理。考虑到可靠性,一般不建议使用Windows 2000Server作为DHCP服务器,而建议使用交换机或灵巧网关作为DHCP服务器。

在校园网中使用DHCP服务器时,如果DHCP服务器和客户被三层交换机隔离开,需要在三层交换机上使用dhcp relay把客户机的DHCP请求转发到DHCP服务器。

把灵巧网关作为DHCP服务器,需要以下设置:

配置dhcpd.cf文件

在startup.rc中启动dhcpd

下面是dhcpd.cf的配置实例:

#缺省的域名
option domain-name "xxxx.net";
option domain-name-servers 202.102.192.68;
default-lease-time 60000;
max-lease-time 72000;

#如果使用WINS服务,设置WINS服务器
#option netbios-name-servers 192.168.1.1;
#option netbios-dd-server 192.168.1.1;
#option netbios-node-type 8;

#eth0接口,不启用DHCP
subnet 218.22.166.96 netmask 255.255.255.248 {
not authoritative;
}

#其他
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.30 192.168.1.200;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
}

subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.30 192.168.2.200;
option broadcast-address 192.168.2.255;
option routers 192.168.2.254;
}

subnet 192.168.3.0 netmask 255.255.255.0 {
range 192.168.3.30 192.168.3.200;
option broadcast-address 192.168.3.255;
option routers 192.168.3.254;
}

subnet 192.168.4.0 netmask 255.255.255.0 {
range 192.168.4.30 192.168.4.200;
option broadcast-address 192.168.4.255;
option routers 192.168.4.254;
}

============================================================
[註] 以上內容原處為: http://www.cnx8.com/fwq-fh-iptables/2004-09-17-04-47-04.htm

沒有留言: