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

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

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

(完)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航