首页  编辑  

Linux端口重定向

Tags: /计算机文档/Linux & Unix/   Date Created:

把本机某个端口转发给另外一台机器,一定要下面两条指令联合使用:

#  iptables -t nat -A PREROUTING -p tcp --dport 94 -j DNAT --to 10.144.45.94:443

#  iptables -t nat -A POSTROUTING -j MASQUERADE

Linux下,有些发行版把1024以下的端口号,作为ROOT特权用处,所以Tomcat用80启动就无法正常运行了。

Linux可以对端口做重定向,例如以下指令把80端口转向为8080:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

上述指令,对127.0.0.1 IP不做转发,如果要对127.0.0.1:8080也转发到127.0.0.1:80,则需要以下指令:

sudo iptables -t nat -I OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080

保存规则,保存到自己文件路径:

iptables-save > /etc/iptables.rules

添加网络启动时自动启动iptables,需要修改此文件/etc/network/interfaces,添加如下一行:

pre-up iptables-restore < /etc/iptables.rules

给个模版做参考,完成后就是这个样子:

iface eth0 inet static

address 192.168.1.100

netmask 255.255.255.0

gateway 192.168.1.1

pre-up iptables-restore < /etc/iptables.rules

iptables不会自动保存规则并重启机器后自动加载,要永久起作用,请安装

sudo apt-get install iptables-persistent

sudo /etc/init.d/iptables-persistent save

sudo /etc/init.d/iptables-persistent reload

端口转发

一 从一台机到另一台机端口转发

启用网卡转发功能

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

举例:从192.168.0.132:21521(新端口)访问192.168.0.211:1521端口

a. 同一端口转发(192.168.0.132上开通1521端口访问

iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT

iptables -t nat -I PREROUTING -p tcp --dport 1521 -j DNAT --to 192.168.0.211

iptables -t nat -I POSTROUTING -p tcp --dport 1521 -j MASQUERADE

b. 不同端口转发(192.168.0.132上开通21521端口访问)

iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21521 -j ACCEPT

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 21521 -j DNAT --to-destination 192.168.0.211:1521

iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d 192.168.0.211 -p tcp -m tcp --dport 1521 -j SNAT --to-source 192.168.0.132

以上两条等价配置(更简单[指定网卡]):

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 31521 -j DNAT --to 192.168.0.211:1521

iptables -t nat -A POSTROUTING -j MASQUERADE

保存iptables

#service iptables save

#service iptables restart

二 用iptables做本机端口转发

代码如下:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

估计适当增加其它的参数也可以做不同IP的端口转发。

如果需要本机也可以访问,则需要配置OUTPUT链(********特别注意:本机访问外网的端口会转发到本地,导致访不到外网,如访问yown.com,实际上是访问到本地,建议不做80端口的转发或者指定目的 -d localhost):

iptables -t nat -A OUTPUT -d localhost -p tcp --dport 80 -j REDIRECT --to-ports 8080

原因:

外网访问需要经过PREROUTING链,但是localhost不经过该链,因此需要用OUTPUT。