Iptables 端口(流量)转发 | 一见知得 | Mr J Blog

Iptables 端口(流量)转发

Mr J 5925 0

安装环境

  1. 一台可以访问互联网的 VPS ,能与被转发的端口互相通信
  2. 机器系统为 Linux 发行版 Debian、Redhat 系列,教程使用系统为 Debian 10 和 CentOS 8
  3. 系统镜像采用公有云(Ucloud)的公共镜像
  4. 关闭系统 SELinux

教程开始

Redhat (CentOS 8)系列

关闭并禁用系统默认的 Firewalld 防火墙

    systemctl stop firewalld.service
    systemctl disable firewalld.service

安装并启用 Iptables

    dnf install iptables iptables-services -y
    systemctl start iptables.service
    systemctl enable iptables.service

CentOS 7 安装并启用 Iptables

    yum install iptables iptables-services -y
    systemctl start iptables.service
    systemctl enable iptables.service

清空 Iptables 默认规则并保存

    iptables -F
    iptables -X
    iptables -Z
    service iptables save

开启系统内核转发

    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    sysctl -p /etc/sysctl.conf

设置转发规则

    iptables -t nat -A PREROUTING -p tcp --dport [本机端口号] -j DNAT --to-destination [目标IP:端口]
    iptables -t nat -A PREROUTING -p udp --dport [本机端口号] -j DNAT --to-destination [目标IP:端口]
    iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本机主网卡IP]
    iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本机主网卡IP]

保存重启 Iptables

    service iptables save
    service iptables restart

Debian (Debian 10)系列

Debian 系列发行版系统默认都是使用的 Iptables 顾不需要再次安装

清空 Iptables 默认规则并保存

    iptables -F
    iptables -X
    iptables -Z
    iptables-save > /etc/iptables.up.rules

开启系统内核转发

    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    sysctl -p

设置转发规则

    iptables -t nat -A PREROUTING -p tcp --dport [本机端口号] -j DNAT --to-destination [目标IP:端口]
    iptables -t nat -A PREROUTING -p udp --dport [本机端口号] -j DNAT --to-destination [目标IP:端口]
    iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本机主网卡IP]
    iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本机主网卡IP]

保存规则并重启 Iptables

    iptables-save > /etc/iptables.up.rules
    iptables-restore < /etc/iptables.up.rules

至此简单的使用 Iptables 转发端口(流量)的教程就到此结束,一下是进阶教程

进阶教程

多端口转发方案

    iptables -t nat -A PREROUTING -p tcp -m tcp --dport [本机端口段开始:本机端口段结束] -j DNAT --to-destination [目标IP]
    iptables -t nat -A PREROUTING -p udp -m udp --dport [本机端口段开始:本机端口段结束] -j DNAT --to-destination [目标IP]
    iptables -t nat -A POSTROUTING -d [目标IP] -p tcp -m tcp --dport [目标端口段开始:目标端口段结束] -j SNAT --to-source [本机主网卡IP]
    iptables -t nat -A POSTROUTING -d [目标IP] -p udp -m udp --dport [目标端口段开始:目标端口段结束] -j SNAT --to-source [本机主网卡IP]

查看目前 Iptables 规则

    iptables -nL --line-number

查看目前 Iptables 的 NAT(转发)规则

    iptables -t nat -vnL

删除指定 NAT(转发)规则

通过查看 NAT 规则找到规则对应的列号(一条规则就是一列,初始号为 1)

    iptables -t nat -D POSTROUTING [规则列号]
    iptables -t nat -D PREROUTING [规则列号]

总结

使用系统防火墙如 Iptables 等来转发流量是最稳定、资源开销最低的一种方式,同时可以看到转发后从使用者本地通过转发端到被转发端的具体延迟,而不是像其他第三方工具转发出来只会显示使用者本地到转发端的延迟,同时资源开销也很大,两者各有优劣;下一篇教程可能是使用 Firewalld 转发端口(流量)的教程,或者是如 Nginx、Brook、Gost、Socat 等第三方工具来实现端口(流量)

发表评论
表情 图片 链接 代码

分享
微信
微博
QQ