首页 > 系统相关 >利用iptables实现端口映射(支持动态域名)

利用iptables实现端口映射(支持动态域名)

时间:2024-10-19 12:10:31浏览次数:5  
标签:iptables bin domain ip echo 动态域名 port 端口映射

将下列代码保存到/bin/ddns_portmap.sh

#!/bin/bash

# 检查参数
if [ "$#" -ne 2 ]; then
    echo "Usage: $0 <domain> <local_port1:remote_port1,local_port2:remote_port2,...>"
    exit 1
fi

# 从参数获取动态域名和端口映射
domain=$1
port_mappings=$2

# 获取当前解析的IP地址
new_ip=$(getent ahosts $domain | awk '{print $1}' | head -n 1)

# 如果无法解析域名,退出
if [ -z "$new_ip" ]; then
    echo "Failed to resolve domain: $domain"
    exit 1
fi

# 循环处理每个端口映射
IFS=',' read -ra mappings <<< "$port_mappings"
for mapping in "${mappings[@]}"; do
    local_port=$(echo $mapping | cut -d ':' -f 1)
    remote_port=$(echo $mapping | cut -d ':' -f 2)

    # 获取当前iptables中配置的目标IP和端口
    current_mapping=$(iptables -t nat -L PREROUTING -n --line-numbers | grep "dpt:$local_port" | awk '{print $9}')

    # 提取当前的目标IP和目标端口
    current_ip=$(echo $current_mapping | cut -d ':' -f 2)
    current_port=$(echo $current_mapping | cut -d ':' -f 3)

    # 如果新IP或远程端口和现有的不一致,则更新iptables规则
    if [ "$new_ip" != "$current_ip" ] || [ "$remote_port" != "$current_port" ]; then
        # 删除旧规则
        if [ -n "$current_ip" ]; then
            iptables -t nat -D PREROUTING -p tcp --dport $local_port -j DNAT --to-destination $current_ip:$current_port
            iptables -t nat -D POSTROUTING -p tcp -d $current_ip --dport $current_port -j MASQUERADE
        fi

        # 添加新规则
        iptables -t nat -A PREROUTING -p tcp --dport $local_port -j DNAT --to-destination $new_ip:$remote_port
        iptables -t nat -A POSTROUTING -p tcp -d $new_ip --dport $remote_port -j MASQUERADE

        echo "Updated iptables rules for $domain: $local_port -> $new_ip:$remote_port"
    else
        echo "No change in IP address or remote port for $domain on port $local_port."
    fi
done

crontab -e
贴入下列代码即可完成端口映射

* * * * * /bin/ddns_portmap.sh 39.172.91.235 201:201
* * * * * /bin/ddns_portmap.sh dx11.fm20.cn 1110:1110,1112:1112,1161:1161

标签:iptables,bin,domain,ip,echo,动态域名,port,端口映射
From: https://www.cnblogs.com/xiangxisheng/p/18475730

相关文章

  • k8s和ipvs、lvs、ipvsadm,iptables,底层梳理,具体是如何实现的
    计算节点的功能:提供容器运行的环境kube-proxy的主要功能:术业有专攻,kube-proxy的主要功能可以概括为4个字网络规则那么kube-proxy自己其实是个daemonset控制器跑的每个节点上都有个的pod它负责网络规则其实呢它还是个小领导它不直接去搞网络规则而是告诉别人,网络规......
  • IPtables(一)
    规则:filter:包过滤       nat:网络地址转换       mangle:包重构       raw:数据跟踪处理prerouting:路由前规则链      input:数据包入口规则链       forward:转发规则链      output:数据包出口规则链       postrouting......
  • Linux iptables用法与NAT
    1.相关概念2.iptables相关用法3.NAT(DNAT与SNAT)相关概念防火墙除了软件及硬件的分类,也可对数据封包的取得方式来分类,可分为代理服务器(Proxy)及封包过滤机制(IPFilter)。代理服务是一种网络服务,通常就架设在路由上面,可完整的掌控局域网的对外连接。IPFilter这种方式可以直接......
  • iptables配置网络防火墙
    文章目录基本链配置动作常用命令基本链链是数据包传播的途径,每条链对应多条规则。数据包进入服务器需要经过多道关卡,以下是三条应用在“主机防火墙”中的链。INPUT:入口流量OUTPUT:出口流量FORWARD:转发流量配置动作配置防火墙规则时,对于指定的数据包,我们通常可以......
  • 基于 iptables 的防火墙方案
    基于iptables的防火墙方案假设两台主机A(172.29.100.100)和B(10.100.100.100),iptables规则应用于A机器上.允许两台主机互通-AINPUT-s10.100.100.100-jACCEPT-AINPUT-s0.0.0.0/0-jDROP允许A访问B,反向禁止-AINPUT-mstate--stateESTABLISHE......
  • 在K8S中,kube-proxy ipvs和 iptables 有何异同?
    在Kubernetes(K8s)中,kube-proxy是负责服务发现和负载均衡的关键组件,它支持多种代理模式,其中IPVS和iptables是两种常用的模式。以下是kube-proxy在IPVS和iptables模式下的异同点:1.相同点服务发现和负载均衡:IPVS和iptables模式都用于实现Kubernetes中的服务发现和负载均衡功能。......
  • 在K8S中,kube-proxy iptables原理是什么?
    在Kubernetes中,kube-proxy使用不同模式来实现其功能,其中iptables模式是早期广泛使用的模式之一。下面详细介绍kube-proxy使用iptables模式的基本原理。1.iptables原理概述iptables是Linux内核的一部分,用于定义网络封包过滤规则。它是一个用户空间的应用程序,用来设......
  • iptables一句话修复安全漏洞
    iptables一句话修复安全漏洞原创 龚诗嘉 运维前沿  2024年08月30日08:20 辽宁 听全文  iptables一句话安全修复漏洞安全漏洞对于开发和运维人员来说总是灾难,而且总是来的猝不及防CVE-2022-22947GET /actuator/gateway/routes HTTP/1.1Host: 127.0.0.1:......
  • 虚拟机端口映射到本机端口(超详细)
    应用场景:在工作或者学习中,我们和我们的团队都是处在一个局域网中的,为了某些业务,我们会在自己的本机安装虚拟机,比如我们会安装一台linux虚拟机作为服务器,在服务器上搭建对应的服务,这时候需要团队都能访问到你的虚拟机,但很明显,如果我们用的NAT模式的话,我们的虚拟......
  • iptables来开放某个端口
    要使用iptables来开放某个端口,你需要添加一条规则到filter表的INPUT链,以允许进入的流量通过指定的端口。以下是一个例子,假设你想要开放TCP端口80(HTTP):sudoiptables-AINPUT-ptcp--dport80-jACCEPT如果你还需要开放UDP端口(例如,如果你运行的是某种形式的DNS服务器),你可以使用......