免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: platinum
打印 上一主题 下一主题

[网络管理] 《iptables 高级使用研讨》PPT 及相关源代码(讲座视频新鲜出炉!!!) [复制链接]

论坛徽章:
0
41 [报告]
发表于 2010-08-11 13:33 |只看该作者
回复 38# platinum

斑竹,你看下面的脚本应该明白了,现在没有环境,等下周再实验下,不知道有没有问题,因为之前用SNAT是不能连接internet的,现在改成MASQUERADE。
  1. #!/bin/sh
  2. #
  3. # netdetectd -- Start netdetect server
  4. #
  5. # chkconfig: 35 93 07
  6. # description:        Starts, stops pppoe server
  7. #

  8. # Source function library.
  9. . /etc/init.d/functions

  10. IFCONFIG=/sbin/ifconfig
  11. IP=/sbin/ip
  12. PPPOE_SERV=/sbin/pppoe-server
  13. IPTABLES=/sbin/iptables
  14. BRCTL=/usr/sbin/brctl
  15. LOCKF=/var/lock/subsys/netdetectd
  16. NDSVC=/etc/netdetective/bin/netdetective
  17. NDSVR=/etc/netdetective/bin/ndsvr
  18. NDCLI=/etc/netdetective/bin/ndclient

  19. if [ ! -x $IFCONFIG ]; then
  20.     echo -n $"$IFCONFIG does not exist."; warning; echo
  21.     exit 1
  22. fi

  23. if [ ! -x $IP ]; then
  24.     echo -n $"$IP does not exist."; warning; echo
  25.     exit 1
  26. fi

  27. if [ ! -x $PPPOE_SERV ]; then
  28.     echo -n $"$PPPOE_SERV does not exist."; warning; echo
  29.     exit 1
  30. fi

  31. if [ ! -x $IPTABLES ]; then
  32.     echo -n $"$IPTABLES does not exist."; warning; echo
  33.     exit 1
  34. fi

  35. if [ ! -x $BRCTL ]; then
  36.     echo -n $"$BRCTL does not exist."; warning; echo
  37.     exit 1
  38. fi

  39. if [ ! -x $NDSVC ]; then
  40.     echo -n $"$NDSVC does not exist."; warning; echo
  41.     exit 1
  42. fi

  43. if [ ! -x $NDSVR ]; then
  44.     echo -n $"$NDSVR does not exist."; warning; echo
  45.     exit 1
  46. fi

  47. if [ ! -x $NDCLI ]; then
  48.     echo -n $"$NDCLI does not exist."; warning; echo
  49.     exit 1
  50. fi

  51. # MAX is the maximum number of addresses your server
  52. # is allowed to hand out.
  53. MAX=5

  54. # BASE is the lowest IP address your server is allowed
  55. # to hand out.
  56. LOCT=`ifconfig eth0|grep 'inet addr:'|awk -F: '{print $2}'|awk '{print $1}'`
  57. BASE=`ifconfig eth0|grep 'inet addr:'|awk -F: '{print $2}'|awk '{print $1}'|awk -F. -v OFS=. '$4<255{$4=$4+1}1'`

  58. # NAT is the set of addresses which your server will
  59. # NAT behind it. Other addresses behind your server
  60. # WILL NOT be NATed.
  61. NAT=`ip route list|grep 'dev eth0'|awk '{print $1}'`

  62. # MYIP is the public IP address of this server.
  63. MYIP=`ifconfig eth1|grep 'inet addr:'|awk -F: '{print $2}'|awk '{print $1}'`

  64. setfwrule() {

  65.     $IPTABLES -t mangle -F
  66.     $IPTABLES -t nat -F
  67.     $IPTABLES -F

  68.     #mangle PREROUTING
  69.     $IPTABLES -t mangle -P PREROUTING ACCEPT

  70.     #nat PREROUTING
  71.     $IPTABLES -t nat -P PREROUTING ACCEPT
  72.     $IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -m mark ! --mark 0x8 -j DNAT --to-destination $LOCT:8080

  73.     #filter FORWARD
  74.     $IPTABLES -P FORWARD DROP
  75.     $IPTABLES -A FORWARD -p icmp -j ACCEPT
  76.     $IPTABLES -A FORWARD -p tcp --dport 22 -j ACCEPT
  77.     $IPTABLES -A FORWARD -p tcp --sport 22 -j ACCEPT
  78.     $IPTABLES -A FORWARD -p udp --dport 53 -j ACCEPT
  79.     $IPTABLES -A FORWARD -p udp --sport 53 -j ACCEPT
  80.     $IPTABLES -A FORWARD -p udp --dport 68 -j ACCEPT
  81.     $IPTABLES -A FORWARD -p udp --sport 68 -j ACCEPT
  82.     $IPTABLES -A FORWARD -p udp --dport 1812 -j ACCEPT
  83.     $IPTABLES -A FORWARD -p udp --sport 1812 -j ACCEPT
  84.     $IPTABLES -A FORWARD -p udp --dport 1813 -j ACCEPT
  85.     $IPTABLES -A FORWARD -p udp --sport 1813 -j ACCEPT

  86.     $IPTABLES -A FORWARD -m mark --mark 8 -j ACCEPT
  87.     $IPTABLES -A FORWARD -m physdev --physdev-in eth3 -j ACCEPT

  88.     $IPTABLES -A FORWARD -s $LOCT -j ACCEPT
  89.     $IPTABLES -A FORWARD -d $LOCT -j ACCEPT

  90.     #nat POSTROUTING
  91.     $IPTABLES -t nat -P POSTROUTING ACCEPT
  92.     #$IPTABLES -t nat -A POSTROUTING -s $NAT -j SNAT --to-source $MYIP
  93.     $IPTABLES -t nat -A POSTROUTING -s $NAT -j MASQUERADE
  94. }

  95. resetfwrule() {
  96.     $IPTABLES -t mangle -F
  97.     $IPTABLES -t nat -F
  98.     $IPTABLES -F

  99.     $IPTABLES -t mangle -P PREROUTING ACCEPT
  100.     $IPTABLES -t nat -P PREROUTING ACCEPT
  101.     $IPTABLES -P FORWARD ACCEPT
  102.     $IPTABLES -t nat -P POSTROUTING ACCEPT
  103. }

  104. RETVAL=0
  105. case "$1" in
  106.     start)
  107.             echo -n $"Starting pppoed server: "
  108.             daemon $PPPOE_SERV -T 60 -I eth0 -N $MAX -L $LOCT -R $BASE
  109.             RETVAL=$?
  110.             echo
  111.             [ $RETVAL -eq 0 ] && touch $LOCKF
  112.         setfwrule

  113.         $BRCTL addbr ethr
  114.         $BRCTL addif ethr eth3
  115.         $BRCTL addif ethr eth2
  116.         $IFCONFIG eth3 0.0.0.0 up
  117.         $IFCONFIG eth2 0.0.0.0 up
  118.         $IFCONFIG ethr up
  119.             ;;
  120.     stop)
  121.             echo -n $"Stopping pppoed server: "

  122.         $IFCONFIG ethr down
  123.         $IFCONFIG eth2 down
  124.         $IFCONFIG eth3 down
  125.         $BRCTL delif ethr eth2
  126.         $BRCTL delif ethr eth3
  127.         $BRCTL delbr ethr        

  128.         resetfwrule
  129.             killproc $PPPOE_SERV
  130.             RETVAL=$?
  131.             echo
  132.             [ $RETVAL -eq 0 ] && rm -f $LOCKF
  133.             ;;
  134.     status)
  135.         status $PPPOE_SERV
  136.             RETVAL=$?
  137.         ;;
  138.     restart)
  139.             $0 stop
  140.             sleep 3
  141.             $0 start
  142.             RETVAL=$?
  143.             ;;
  144.     *)
  145.             echo $"Usage: $0 {start|stop|status|restart}"
  146.             exit 1
  147.             ;;
  148. esac

  149. exit $RETVAL
复制代码

论坛徽章:
0
42 [报告]
发表于 2010-08-11 13:38 |只看该作者
总算看明白了
你的 Linux 实际有 3 个网卡
eth0 对外
eth1 和 eth2 对内,想桥接
你想对 eth1 做 PPPoE,且只能 PPPoE 后才允许上网
你想对 eth2 直接做 NAT,只要连上 eth2 后就可以直接出去
同时你需要 eth2 也能和 eth1 互访

是这个需求吗?
如果是,那么你直接对 eth1 做 PPPoE,对 eth2 做 NAT 就可以了,两个所在网段不同,但可以通过 Linux 路由
如果你一定要将 eth1 和 eth2 桥接,可能会涉及到很多其他麻烦事情

论坛徽章:
0
43 [报告]
发表于 2010-08-11 13:49 |只看该作者
回复 42# platinum

在上一个经过验证的网管版本上是eth1连接Internet,eth0做PPPoE拨号

没经过验证的版本是eth3连接Internet,eth0做PPPoE拨号,eth2接内网(内网包括拨号子网)

{:3_186:}  不知道这个脚本能不能实现这个功能!

论坛徽章:
0
44 [报告]
发表于 2010-08-11 13:51 |只看该作者
如果仅仅是这个需求,那很好实现
但由于时间不是很充裕,你的脚本又很长,我没有仔细看

论坛徽章:
0
45 [报告]
发表于 2010-08-11 13:56 |只看该作者
回复 44# platinum

不需要看太多地方,看下三个地方就行了,一个是
  1. $IPTABLES -A FORWARD -m physdev --physdev-in eth3 -j ACCEPT
复制代码
接着是桥接部分
  1.         $BRCTL addbr ethr
  2.         $BRCTL addif ethr eth3
  3.         $BRCTL addif ethr eth2
  4.         $IFCONFIG eth3 0.0.0.0 up
  5.         $IFCONFIG eth2 0.0.0.0 up
  6.         $IFCONFIG ethr up
复制代码
最后就是
  1. $IPTABLES -t nat -A POSTROUTING -s $NAT -j MASQUERADE
复制代码

论坛徽章:
0
46 [报告]
发表于 2010-08-11 14:05 |只看该作者
你这样做有几个问题
1、FORWARD 默认是 DROP,而其中你又没设置 ESTABLISHED 和 REALITED 允许通过,可能通不了
2、你单纯让 eth2 与 eth3 桥接,那么 eth2 下面的机器无法与 eth0 拨号的机器通信,你的需求我不太明确,我没得到 42 楼猜测的确认
3、如果 eth3 是网桥,而没有桥地址,那么 Linux 自己是无法上网的,且我不清楚 Linux 是否之前配置了公网 IP,如果是,难道你的 eth2 的所有 IP 也都各自配成不同的公网 IP 吗?

建议你把需求、拓扑、环境、接法等都描述清楚
在讲课时我提到了《提问的智慧》

论坛徽章:
0
47 [报告]
发表于 2010-08-11 14:56 |只看该作者
你这样做有几个问题
1、FORWARD 默认是 DROP,而其中你又没设置 ESTABLISHED 和 REALITED 允许通过,可能通 ...
platinum 发表于 2010-08-11 14:05

1、FORWARD设置成DROP,是堵接内网的station能够访问外部,这个不需要考虑,需要的时候偶会用下面的命令开通它:
iptables -A FORWARD -s 192.168.xxx.xxx -j ACCEPT
iptables -A FORWARD -d 192.168.xxx.xxx -j ACCEPT

2、42楼你所说的跟我验证过的网关方式一样,那个地方是用eth0拨号,eth1连接外网,没有问题,现在需求的是:为了能够使接eth3接口的管理子网(可以看成能连接Internet的外网,肯定不是Internet)访问接eth2的监控子网(包括eth0拨号子网,eth0和eth2接的都是内网),那就使用透明网桥。
3、eth0可以配置就是所谓公网IP,因为拨号子网和外部管理子网可能是同一网段,至于拨号客户端的IP能够被拨号服务器指定一个范围,这个地方暂时不用考虑,因为能达成拨号,下面就是连网的问题。

至于网络拓扑和接法43楼说的很明白吧?环境用的是CentOS5.4,需求就是:就算有拨号存在,还是能使用透明网桥达成管理子网(外网)和监控子网(内网)互访,甚至这两个网络属于同一个网段。

斑竹如果还是不明白了,那这个问题就到此为止,还是非常感谢了!

论坛徽章:
0
48 [报告]
发表于 2010-08-11 15:03 |只看该作者
有几个概念比较乱
1、管理子网(外网):eth3
2、监控子网(内网):eth2
没经过验证的版本是eth3连接Internet,eth0做PPPoE拨号,eth2接内网(内网包括拨号子网)

那么 eth0 做 PPPoE 服务,eth2 所连接的网络还要拨 eth0 的 PPPoE 吗?
eth0做PPPoE拨号,eth2接内网(内网包括拨号子网)

需求也很不清楚,有拨号存在,存在在哪里?从哪拨到哪里?
需求就是:就算有拨号存在,还是能使用透明网桥达成管理子网(外网)和监控子网(内网)互访


感觉这个问题其实不是问题,问题在于对问题的描述和对问题的理解上,我一直都没有弄清具体的需求和具体的环境

论坛徽章:
0
49 [报告]
发表于 2010-08-12 09:30 |只看该作者
深刻学习下

论坛徽章:
0
50 [报告]
发表于 2010-08-12 09:33 |只看该作者
白金老大,爱4你了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP