当前位置:操作系统 > Unix/Linux >>

iptables实现ADSL拨号条件下的透明代理

iptables实现ADSL拨号条件下的透明代理

  作者:platinum

  时间:2005-07-10

  一. 基本情况:

  1. 1台redhat as3up3机器

  2. 两块网卡eth0(内网192.168.2.254),eth1(外网,通过ADSL拨号,上面跑ppp0)

  3. # echo 1 > /proc/sys/net/ipv4/ip_forward

  4. # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

  5. 现在内网的192.168.2网段的机器可以共享上网了

  6. 使用setup命令来配置防火墙,规则为:完全信任eth0,放开对eth1的80端口的访问

  二. 问题所在:

  1. 现在需要让公网上的机器访问外网卡的80端口,并转发到192.168.2.252的8080端口

  2. # iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.2.252:8080

  转发失败

  三. 解决方案:

  1. # chkconfig iptables off

  2. # service iptables stop

  3. # more /etc/rc.local

  touch /var/lock/subsys/local

  /bin/bash /usr/local/sbin/firewall

  /bin/bash /usr/local/sbin/DNAT-IP &

  4. # more /usr/local/sbin/firewall

  #! /bin/bash

  WAN=$(ifconfig ppp0|grep "inet"|awk '{print $2}'|awk -F: '{print $2}')

  modprobe ip_conntrack_ftp

  modprobe ip_nat_ftp

  echo 1 > /proc/sys/net/ipv4/ip_forward

  iptables -F

  iptables -F -t nat

  iptables -X

  iptables -X -t nat

  iptables -P INPUT DROP

  iptables -A INPUT -i eth0 -j ACCEPT

  iptables -A INPUT -i ppp0 -p tcp --dport 22 -j ACCEPT

  iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

  iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE

  iptables -t nat -A PREROUTING -d $WAN -p tcp --dport 80 -j DNAT --to 192.168.2.252:8080

  5. # more /usr/local/sbin/DNAT-IP

  #! /bin/bash

  while true

  do

  WAN=$(ifconfig ppp0|grep "inet"|awk '{print $2}'|awk -F: '{print $2}')

  iptables -t nat -R PREROUTING 1 -d $WAN -p tcp --dport 80 -j DNAT --to 192.168.2.252:8080

  sleep 60

  done

  6. 将/etc/sysconfig/network-scripts/ifcfg-ppp0中的PPPOE_TIMEOUT=80,改为0,这样不会自动掉线

  7. 让192.168.2.252机器的网关指向LINUX

  方法是修改/etc/sysconfig/network及/etc/sysconfig/network-scripts/ifcfg-eth0这两个文件

  指定GATEWAY=192.168.2.254

  然后service network restart

  8. 将ifcfg-eth1改为

  # Realtek|RTL-8029(AS)

  DEVICE=eth1

  ONBOOT=no

  BOOTPROTO=dhcp

  附录:

  1. 220.106.0.20是网通的dns,在254服务器上可以设置

  方法为:在/etc/resolv.conf中添加nameserver 220.106.0.20

  2. iptables -I INPUT -p tcp --dport 22 -j ACCEPT

  可以让外网能ssh登录进来

  iptables --line-numbers -L INPUT

  可以查看上述规则的编号,比如说是2

  iptables -D INPUT 2

  删除上述规则,让外网无法进入

  3. 增加一个nat

  iptables -t nat -A PREROUTING -d 221.219.9.163 -p tcp --dport 8080 -j DNAT --to 192.168.2.51:8080

  删除某条nat

  iptables -t nat -D PREROUTING 6

  (完)本文来自:http://www.xiaoyaxiao.com/5560.html
发表您的高见!
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,