在Ubuntu系统中配置端口映射

Lear 2025-03-04 10:00:00
Categories: > > Tags:

在Ubuntu系统中配置端口映射
在Ubuntu系统中配置端口映射(端口转发)通常可以通过 iptables、nftables 或 UFW 工具实现。以下是具体步骤:

一、启用IP转发

端口映射需要系统支持IP转发功能。

  1. 临时启用(重启失效)

    bash

    sudo sysctl -w net.ipv4.ip_forward=1

  2. 永久启用
    编辑 /etc/sysctl.conf 文件,取消注释或添加以下行:

    bash

    net.ipv4.ip_forward=1

    保存后生效:

    bash

    sudo sysctl -p

二、使用 iptables 配置端口映射

1. 基本命令(临时生效)

假设将 外部端口 8080 转发到 目标IP 192.168.1.100 的 80 端口

bash

# 添加NAT规则(端口转发)

sudo iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –to-destination 192.168.1.100:80

# 允许数据包转发到目标地址

sudo iptables -A FORWARD -p tcp -d 192.168.1.100 –dport 80 -j ACCEPT

# 启用源地址转换(MASQUERADE)

sudo iptables -t nat -A POSTROUTING -j MASQUERADE

2. 保存规则(永久生效)

安装 iptables-persistent 工具保存规则:

bash

sudo apt update

sudo apt install iptables-persistent

# 保存当前规则

sudo netfilter-persistent save

3. 查看现有规则

bash

sudo iptables -t nat -L -n -v

4. 删除规则

bash

# 列出所有规则并找到要删除的规则编号

sudo iptables -t nat -L PREROUTING –line-numbers

# 删除指定编号的规则(例如编号1)

sudo iptables -t nat -D PREROUTING 1

三、使用 nftables(推荐,替代iptables)

Ubuntu 22.04+ 默认使用 nftables,配置更简洁:

bash

# 创建新表

sudo nft add table ip nat

# 添加链和规则(示例:将8080转发到192.168.1.100:80)

sudo nft add chain ip nat prerouting { type nat hook prerouting priority 0 \; }

sudo nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }

sudo nft add rule ip nat prerouting tcp dport 8080 dnat to 192.168.1.100:80

sudo nft add rule ip nat postrouting masquerade

# 保存规则

sudo nft list ruleset > /etc/nftables.conf

四、使用 UFW 配置端口转发

若已使用 UFW 管理防火墙,可编辑UFW规则文件:

  1. 修改UFW配置文件

    bash

    sudo nano /etc/ufw/before.rules

    在文件末尾添加以下内容(示例转发8080到80):

    bash

    *nat

    :PREROUTING ACCEPT [0:0]

    -A PREROUTING -p tcp –dport 8080 -j DNAT –to-destination 192.168.1.100:80

    COMMIT

  2. 重启UFW生效

    bash

    sudo ufw disable && sudo ufw enable

  3. 允许外部访问端口

    bash

    sudo ufw allow 8080/tcp

五、验证端口映射

  1. 本地测试

    bash

    curl http://localhost:8080 # 本地访问

    telnet 192.168.1.100 80 # 直接测试目标端口

  2. 远程测试

    bash

    telnet <你的公网IP> 8080

  3. 检查端口监听状态

    bash

    sudo ss -tuln | grep 8080

六、注意事项

  1. 防火墙放行:确保本地防火墙(UFW/iptables)和云服务器安全组放行外部端口。
  2. 目标服务可达:确保目标IP和端口的服务已启动且可访问。
  3. NAT配置:若目标设备与Ubuntu不在同一子网,需正确配置路由或网关。
  4. IPv6转发:如需支持IPv6,需额外配置 net.ipv6.conf.all.forwarding=1。

通过以上方法,可灵活实现单机或跨网络的端口映射,适用于Web服务转发、内网穿透等场景。