iptables端口转发 回首页

Alice想向Bob建立TCP连接,但是因为种种原因不能直接建立连接。
如果有一台机器Carol和两边都没有连接障碍,那么就有可能通过Carol帮助从Alice向Bob建立连接。

在Carol上开一个 daemon 监听一个特定端口,然后把Alice发过来的数据都原封不动的转发给Bob,
-A PREROUTING -p tcp -m tcp --dport 1001 -j DNAT --to-destination Bob:2002
-A POSTROUTING -d Bob -p tcp -m tcp --dport 2002 -j SNAT --to-source Carol
(如果Carol是Bob的网关,那么第二条iptables规则是不需要的)

这样就把发给 Carol:1001 的数据转发给 Bob:2002 了。

## Web Server 端口映射一定要在 Iptables NAT透明代理指令前面,否则内网用户将无法通过公网IP或域名访问内网的Web服务器!##

# 假设:

# Bob的情况:
# 网段: 192.168.10.0/24
# IP: 192.168.10.16

# Carol的情况:
# Carol.eth0: 192.168.0.53
# Carol.eth1: 192.168.10.53

# Alice能连接Carol.eth0
# Carol.eth1能连接Bob

###################################################################################
### squid 透明代理
#iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
#iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT --to a.b.c.d

### 3389
### 将发到Carol.eth0的端口3389的包,转发到Bob:3389 #
    iptables -A INPUT -p tcp --dport 3389 -m state --state NEW -j ACCEPT
    # iptables -t nat -A PREROUTING -d Carol.eth0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination Bob:3389
    iptables -t nat -A PREROUTING -d Carol.eth0 -p tcp --dport 3389 -j DNAT --to Bob

### Bob:3389的包,经Carol.eth1返回 ##
    iptables -A INPUT -d Bob -p tcp -m tcp --dport 3389 -i eth0 -j ACCEPT
    iptables -t nat -A POSTROUTING -d Bob -p tcp --dport 3389 -j SNAT --to Carol.eth1

# 一些人经常忘了打开FORWARD链的相关端口,特此增加:
    iptables -A FORWARD -o eth1 -d Bob -p tcp --dport 3389 -j ACCEPT
    iptables -A FORWARD -i eth1 -s Bob -m state --state ESTABLISHED -p tcp --sport 3389 -j ACCEPT

## 10022
### 将发到Carol.eth0的端口10022的包,转发到Bob:10022 #
    iptables -A INPUT -p tcp --dport 10022 -m state --state NEW -j ACCEPT
    iptables -A INPUT -d Bob -p tcp -m tcp --dport 10022 -i eth0 -j ACCEPT

### 进:
### iptables -t nat -A PREROUTING -d Carol.eth0 -p tcp -m tcp --dport 10022 -j DNAT --to-destination Bob:10022
    iptables -t nat -A PREROUTING -d Carol.eth0 -p tcp --dport 10022 -j DNAT --to Bob

### 出:
### Bob:10022的包,经Carol.eth1返回 #
### iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -p tcp --dport 10022 -j SNAT --to Carol.eth1
    iptables -t nat -A POSTROUTING -d Bob -p tcp --dport 10022 -j SNAT --to Carol.eth1

# 一些人经常忘了打开FORWARD链的相关端口,特此增加:
    iptables -A FORWARD -o eth1 -d Bob -p tcp --dport 10022 -j ACCEPT
    iptables -A FORWARD -i eth1 -s Bob -m state --state ESTABLISHED -p tcp --sport 10022 -j ACCEPT


# 为80和443端口做tcp代理 #
# iptables -t nat -A PREROUTING -d Carol.eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination Bob
# iptables -t nat -A PREROUTING -d Carol.eth0 -p tcp -m tcp --dport 443 -j DNAT --to-destination Bob

### 如果内网也想通过Carol访问内部的网站,还需要一条规则.
#iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -d Bob -p tcp -m tcp --dport 80 -j SNAT --to-source Bob #网关IP:端口
#iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -d Bob -p tcp -m tcp --dport 443 -j SNAT --to-source Bob #网关IP:端口

###################################################################################