iplaybit
  • 首页
  • 系统运维
  • IT新闻
  • 科技新闻
  • 关于我们
  1. 首页
  2. 系统运维
  3. 正文

用iptables 实现本地端口转发

2020年02月27日 598点热度 1人点赞 0条评论

场景

假如你在用 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 -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
 
 
保存规则
service iptables save
service iptables restart
 
 
查看iptables nat映射情况
iptables -t nat -nL
 
 
也可以采用如下命令:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
 
 
标签: iptables linux
最后更新:2020年02月27日

iplaybit

点赞
< 上一篇
下一篇 >

文章评论

取消回复
最新 热点 随机
最新 热点 随机
Steam内存测试工具 SPDK详解 Hadoop之HDFS优缺点、设计原理、框架 tmpfs总结 当64核遇上PCIe 4.0 超级算力是这样建成的 Edge for Linux开发者预览将至 WSL子系统可运行带GUI的Linux应用程序
Linux 5.6内核将支持USB4:代码不足2000行 文件系统恢复和日志(journal)文件系统 ext3文件系统 全球首个可移动量子卫星地面站在济南与“墨子号”对接成功 Rman全备迁移恢复11G r1数据库详情 理解Linux系统中的load average
一起来了解为双屏设备而生的Windows 10X系统
标签聚合
文件系统 oracle netapp 存储 san 数据库 AMD hp redo cpu intel docker 操作系统 linux 3par windows

COPYRIGHT © 2020 iplaybit. ALL RIGHTS RESERVED.

京ICP备18020432号-1