假设我有一个网络,其中的服务器负责将所有连接从网络内部路由到 Internet。我该如何设置 iptables,以便它不将传入连接路由到 Internet,而是将其路由到本地主机端口 8080。非常感谢大家的帮助。
答案1
sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080
答案2
可以使用iptables
,但只能使用内核 >= 3.6 的版本。
你必须这样做:
sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080
ip_forward
不是必需的,因为数据包不会被转发,但是如果你不包含 sysctl route_localnet
(只在内核 >= 3.6 中有效),数据包将被内核丢弃,因为它认为它是一个“火星人”,来自外部并且目标地址为 127.0.0.1
答案3
阅读 debian 文档(可能适用于其他发行版)我使用它将 podman/docker 端口重定向到本地主机:
8080-> 80
8083->443
#!/bin/bash
# reset iptables rules
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# redirect ports
iptables -t nat -I OUTPUT --src 0/0 --dst 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -I OUTPUT --src 0/0 --dst 127.0.0.1 -p tcp --dport 443 -j REDIRECT --to-ports 8083
核实:
curl -k https://localhost
curl https://localhost