如何使用iptables进行本地端口转发

jonathan3692bf

我有一个正在侦听端口8080的应用程序(服务器)。我希望能够将端口80转发到它,这样按一下就http://localhost可以解析我的应用程序(位于localhost:8080)。

应该对任何端口映射(例如80:8080=> P_src:P_target进行通用化,并针对现代* nix机器(例如Ubuntu)使用最佳实践。

注意:这都是在本地完成的,因此除了本地主机外,不需要接受任何人的连接。

jonathan3692bf

因此,经过大量搜索之后,我发现答案使用了iptables,设置了NAT并使用了内置的PREROUTING和OUTPUT。

首先,您必须启用端口转发:

echo "1" > /proc/sys/net/ipv4/ip_forward

然后,您必须使用自己的${P_src}值将以下规则添加到iptables NAT表中${P_target}

iptables -t nat -A PREROUTING -s 127.0.0.1 -p tcp --dport ${P_src} -j REDIRECT --to ${P_target}`
iptables -t nat -A OUTPUT -s 127.0.0.1 -p tcp --dport ${P_src} -j REDIRECT --to ${P_target}`

如果要删除规则,则只需使用-D开关,而不是-A每个规则。

为此,我构建了一个不错的小脚本来添加和删除映射。

#!/bin/bash
#
#   API: ./forwardPorts.sh add|rm p1:p1' p2:p2' ...
#
#   Results in the appending (-A) or deleting (-D) of iptable rule pairs that
#   would otherwise facilitate port forwarding.
#
#   E.g
#   sudo iptables -t nat -A PREROUTING -s 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to 8080
#   sudo iptables -t nat -A OUTPUT -s 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to 8080
#

if [[ $# -lt 2 ]]; then
    echo "forwardPorts takes a state (i.e. add or rm) and any number port mappings (e.g. 80:8080)";
    exit 1;
fi

case $1 in
    add )
        append_or_delete=A;;
    rm )
        append_or_delete=D;;
    * )
        echo "forwardPorts requires a state (i.e. add or rm) as it's first argument";
        exit 1; ;;
esac

shift 1;

# Do a quick check to make sure all mappings are integers
# Many thanks to S.O. for clever string splitting:
# http://stackoverflow.com/questions/918886/how-do-i-split-a-string-on-a-delimiter-in-bash
for map in "$@"
do
    IFS=: read -a from_to_array <<< "$map"
    if  [[ ! ${from_to_array[0]} =~ ^-?[0-9]+$ ]] || [[ ! ${from_to_array[1]} =~ ^-?[0-9]+$ ]]; then
        echo "forwardPorts port maps must go from an integer, to an integer (e.g. 443:4443)";
        exit 1;
    fi
    mappings[${#mappings[@]}]=${map}
done

# We're shooting for transactional consistency. Only manipulate iptables if all 
# the rules have a chance to succeed.
for map in "${mappings[@]}"
do
    IFS=: read -a from_to_array <<< "$map" 
    from=${from_to_array[0]}
    to=${from_to_array[1]}

    sudo iptables -t nat -$append_or_delete PREROUTING -s 127.0.0.1 -p tcp --dport $from -j REDIRECT --to $to
    sudo iptables -t nat -$append_or_delete OUTPUT -s 127.0.0.1 -p tcp --dport $from -j REDIRECT --to $to
done

exit 0;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用网关上的iptables进行端口转发

来自分类Dev

如何使用IPTables实现端口转发?

来自分类Dev

如何使用iptables在两个接口之间进行端口转发?

来自分类Dev

在Open-Mesh上使用iptables进行端口转发

来自分类Dev

使用iptables和firejail沙箱进行端口转发

来自分类Dev

iptables-如何将所有外部端口转发到一个本地端口

来自分类Dev

我应该使用哪个本地IP进行端口转发?

来自分类Dev

使用iptables转发出站流量端口

来自分类Dev

Ubuntu 20.04 - 使用 sudo 时使用 iptables 进行端口转发导致“名称解析暂时失败”

来自分类Dev

使用UPnP进行端口转发-关闭端口

来自分类Dev

如何使用Linux主机进行NAT和端口转发

来自分类Dev

使用相同的端口转发规则对多个VM进行端口转发

来自分类Dev

如何禁用SSH本地端口转发?

来自分类Dev

SSH本地端口转发

来自分类Dev

如何在initramfs阶段进行端口转发?

来自分类Dev

使用Vagrant进行Nginx的端口转发

来自分类Dev

使用Vagrant进行Nginx的端口转发

来自分类Dev

使用iptables转发端口不起作用?

来自分类Dev

如何使用本地iptables将出站流量重定向到端口80?

来自分类Dev

是否使用本地或远程端口转发感到困惑?

来自分类Dev

使用SSH与不同用户进行端口转发:如何调试连接问题?

来自分类Dev

使用SSH与不同用户进行端口转发:如何调试连接问题?

来自分类Dev

如何使用libminiupnpc设置端口转发

来自分类Dev

如何使用Python SSHTunnle转发多个端口

来自分类Dev

将端口转发到本地ip +端口

来自分类Dev

如何使用plink将外部端口转发到内部端口

来自分类Dev

如何只允许子网使用iptables端口

来自分类Dev

如何在Azure上进行负载平衡/端口转发?

来自分类Dev

如何创建受限制的SSH用户进行端口转发?

Related 相关文章

  1. 1

    使用网关上的iptables进行端口转发

  2. 2

    如何使用IPTables实现端口转发?

  3. 3

    如何使用iptables在两个接口之间进行端口转发?

  4. 4

    在Open-Mesh上使用iptables进行端口转发

  5. 5

    使用iptables和firejail沙箱进行端口转发

  6. 6

    iptables-如何将所有外部端口转发到一个本地端口

  7. 7

    我应该使用哪个本地IP进行端口转发?

  8. 8

    使用iptables转发出站流量端口

  9. 9

    Ubuntu 20.04 - 使用 sudo 时使用 iptables 进行端口转发导致“名称解析暂时失败”

  10. 10

    使用UPnP进行端口转发-关闭端口

  11. 11

    如何使用Linux主机进行NAT和端口转发

  12. 12

    使用相同的端口转发规则对多个VM进行端口转发

  13. 13

    如何禁用SSH本地端口转发?

  14. 14

    SSH本地端口转发

  15. 15

    如何在initramfs阶段进行端口转发?

  16. 16

    使用Vagrant进行Nginx的端口转发

  17. 17

    使用Vagrant进行Nginx的端口转发

  18. 18

    使用iptables转发端口不起作用?

  19. 19

    如何使用本地iptables将出站流量重定向到端口80?

  20. 20

    是否使用本地或远程端口转发感到困惑?

  21. 21

    使用SSH与不同用户进行端口转发:如何调试连接问题?

  22. 22

    使用SSH与不同用户进行端口转发:如何调试连接问题?

  23. 23

    如何使用libminiupnpc设置端口转发

  24. 24

    如何使用Python SSHTunnle转发多个端口

  25. 25

    将端口转发到本地ip +端口

  26. 26

    如何使用plink将外部端口转发到内部端口

  27. 27

    如何只允许子网使用iptables端口

  28. 28

    如何在Azure上进行负载平衡/端口转发?

  29. 29

    如何创建受限制的SSH用户进行端口转发?

热门标签

归档