配置iptables实现本地端口转发的方法详解
场景
假如你在用 resin 调试一个 Web 程序,需要频繁地重启 resin。这个 Web 程序需要开在 80 端口上,而 Linux 限制 1024 以下的端口必须有 root 权限才能开启。但是你又不愿意在调程序的时候总是开着一个 root 终端。在这种情况下,你可以把 resin 开在默认的 8080 端口上,然后使用 iptables 来实现和真的把服务开在 80 端口上一样的效果。
方法
将与 80 端口的 TCP 连接转接到本地的 8080 端口上。使用 DNAT (Destination Network Address Translation) 技术可以满足这一要求。因为 iptables 在处理本地连接和远程连接的方法不同,所以需要分开处理。下面假设本机的 IP 是 192.168.4.177。
远程连接
远程连接指的是由另外一台机器连接到这台机器上。这种连接的数据包在 iptables 会首先经过 PREROUTING 链,所以只需在 PREROUTING 链中作 DNAT。
# iptables -t nat -A PREROUTING -p tcp -i eth0 -d 192.168.4.177 --dport 80 -j DNAT --to 192.168.4.177:8080
本地连接
本地连接指的是在本机上,用 127.0.0.1 或者本机 IP 来访问本机的端口。本地连接的数据包不会通过网卡,而是由内核处理后直接发给本地进程。这种数据包在 iptables 中只经过 OUTPUT 链,而不会经过 PREROUTING 链。所以需要在 OUTPUT 链中进行 DNAT。除了对 127.0.0.1 之外,对本机 IP (即 192.168.4.177) 的访问也属于本地连接。
# iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j DNAT --to 127.0.0.1:8080
# iptables -t nat -A OUTPUT -p tcp -d 192.168.4.177 --dport 80 -j DNAT --to 127.0.0.1:8080
注意事项
你也许需要通过以下命令打开 IP 转发:
# echo 1 > /proc/sys/net/ipv4/ip_forward
在进行试验时,如果要重新设置 iptables,需要首先清空 nat 表:
# iptables -F -t nat
实例操作
这里将本地接口IP 61.144.a.b 的3389端口 转发到 116.6.c.d的3389 (主要访问到61.144.a.b的3389端口,就会跳转到116.6.c.d的3389)
1、 首先应该做的是/etc/sysctl.conf配置文件的 net.ipv4.ip_forward = 1 默认是0 这样允许iptalbes FORWARD。
2、 service iptables stop 关闭防火墙
3、 重新配置规则
iptables -t nat -A PREROUTING --dst 61.144.a.b -p tcp --dport 3389 -j DNAT --to-destination 116.
6.c.d:3389
iptables -t nat -A POSTROUTING --dst 116.6.c.d -p tcp --dport 3389 -j SNAT --to-source 61.144.a.b
service iptables save
将当前规则保存到 /etc/sysconfig/iptables
若你对这个文件很熟悉直接修改这里的内容也等于命令行方式输入规则。
5、 启动iptables 服务, service iptables start
可以写进脚本,设备启动自动运行;
# vi /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.</p> <p>touch /var/lock/subsys/local</p> <p>sh /root/myshipin.log
---------------------------------------------------------------------
vi myshipin.log
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.</p> <p>iptables -F -t nat
iptables -t nat -A PREROUTING --dst 61.144.a.b -p tcp --dport 3389 -j DNAT --to-destination 116.6.c.d:3389
iptables -t nat -A POSTROUTING --dst 116.6.a.b -p tcp --dport 3389 -j SNAT --to-source 61.144.c.d
~
----------------------------------------------------------------
TCP</p> <p>iptables -t nat -A PREROUTING --dst 61.144.a.b -p tcp --dport 9304 -j DNAT --to-destination 10.94.a.b:9304
iptables -t nat -A POSTROUTING --dst 10.94.a.b -p tcp --dport 9304 -j SNAT --to-source 61.144.a.b</p> <p>UDP
iptables -t nat -A PREROUTING --dst 61.144.a.b -p udp --dport 9305 -j DNAT --to-destination 10.94.a.b:9305
iptables -t nat -A POSTROUTING --dst 10.94.a.b -p udp --dport 9305 -j SNAT --to-source 61.144.a.b
另:
iptables配置文件的位置:/etc/sysconfig/iptables 外网地址发变化在配置文件里修改就可以了。
相关文章
80端口被Win7系统占用怎么解决 Win7系统被80端口占用的解决方法
这篇文章主要介绍了Win7系统80端口被占用怎么解决 Win7系统80端口被占用的解决方法的相关资料,需要的朋友可以参考下2016-07-25- Win10设置连接打印机之后对于在大公司十分有必要。在公司设置打印机方便大家使用,那么Win10怎么添加打印机端口呢?下面小编就为大家介绍打印机端口添加步骤,来看看吧2016-07-24
- Win10系统怎么使用花生壳DDNS端口映射做内网穿透?什么是内网穿透?内网穿透就是过端口映射将一台主机的内网(LAN)IP地址映射成一个公网(WAN)IP地址,让互联网用户可以访问2016-06-17
Windows10系统怎样查看侦听端口?win10查看侦听的端口图文教程
大多数windows10系统的用户喜欢用DOS命令来看被侦听的端口,这其实也是一种方法,但是有些用户用着非常的不习惯,其实还有一个办法就是在资源监听器里面也可以查看,接下来2016-05-24windows7系统怎么打开指定端口 windows7检查端口未打开还是网络故障方
端口是设备与外界通讯交流的出口,功能十分强大,每种网络的服务功能都不相同,为了避免端口出现冲突,我们可以打开指定端口,接下来,我们就来看一下Win7打开指定端口的方2016-05-19win10系统怎么改IIS默认端口号?win10更改IIS默认端口号方法
win10系统怎么改IIS默认端口号?最近由用户想修改IIS默认端口号,但是不太清楚方法,今天小编为大家带来了win10更改IIS默认端口号方法,来看看吧2016-04-28Win10安装wamp apache无法启动80端口被占用解决方法
Win10系统中打开wamp居然无法启动apache服务,测试了很久,80端口被占用了怎么办,很多朋友都遇到了这种情况,今天小编就为大家带来了apache无法启动80端口被占用的解决方2016-04-25Win10系统80端口被System进程占用无法启动Apache怎么办
昨天刚更新了Windows10,总体上来说效果还是蛮不错的,然而今天在开启Apache服务器的时候却发现,Apache莫名其妙的打不开了,起初以为是权限的问题,于是使用管理员身份的2016-04-21Win7系统安装vs和xampp导致80端口发生冲突的解决方法
这篇文章主要介绍了Win7系统安装vs和xampp导致80端口发生冲突的解决方法,导致不能两个同时两个软件,如何解决?感兴趣的小伙伴们可以参考一下2016-03-29Linux中禁止root用户SSH登录及修改SSH端口的方法
这篇文章主要介绍了Linux中禁止root用户SSH登录及修改SSH端口的方法,在服务器安全维护过程中可以用到,需要的朋友可以参考下2016-03-15
最新评论