iptables实现远程端口映射

环境说明

  • Linux服务器两台

    • 客户机:172.16.30.194,80端口无服务

    • 目标机:172.16.30.199,80端口有服务

  • 通过配置iptables,使访问客户机172.16.30.194的80端口流量转发到目标机172.16.30.199的80端口,从而实现映射效果

实现步骤:

  • 客户机和目标机分别开启ipv4转发,vim /etc/sysctl.conf,找到net.ipv4.ip_forward=0,将值改为1,(若没有此项请在文件尾部添加)

    net.ipv4.ip_forward=1
  • 在客户机修改iptables规则

    # 检查已有规则,确保不会出现冲突
    iptables -t nat -nL --line
    ​
    # 清除所有规则
    iptables -F -t nat
    ​
    # 将访问172.16.30.194的80端口流量转发到172.16.30.199的80端口上
    iptables -t nat -A PREROUTING --dst 172.16.30.194 -p tcp --dport 80 -j DNAT --to-destination 172.16.30.199:80
    ​
    # 将172.16.30.199的80端口返回的流量,源ip修改为172.16.30.194后再返回给客户端
    iptables -t nat -A POSTROUTING --dst 172.16.30.199 -p tcp --dport 80 -j SNAT --to-source 172.16.30.194
  • 此时访问172.16.30.194:80即可穿透到172.16.30.199:80

  • 注意:配置映射后,对应端口会被占用,但netstat等工具是看不到对应端口listen状态的,只能通过iptables查看规则,所以配置端口映射后建议额外记录下,方便后续运维