Sim*_*ite 54 iptables port-forwarding network-interface
我有一个服务在 127.0.0.1 上运行,端口为 2222。我需要将所有请求转发到 192.168.2.2:2222(外部 IP),仅从子网 192.168.1.0/24 到 127.0.0.1:2222。
我正在尝试使用它,但它不起作用。
$ iptables -t nat -I PREROUTING -p tcp -d 192.168.1.0/24 --dport 2222 -j DNAT --to-destination 127.0.0.1:2222
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它发挥作用?
UPD:编辑地址方案。
phe*_*mer 80
您正在使用的 iptables 规则将起作用,但您还需要进行一项额外的更改:
sysctl -w net.ipv4.conf.eth0.route_localnet=1
Run Code Online (Sandbox Code Playgroud)
(更换eth0
网卡192.168.2.2
驻留)
默认情况下,此值为0
,它指示内核不路由发往 的外部流量127.0.0.0/8
。这只是为了安全,因为这样的流量是不正常的。
您可以重定向到本地主机,但不能重定向到环回 (127.0.0.0/8)。环回是一个漏洞。您必须重定向到您的真实界面之一。尝试使用重定向。
iptables -t nat -A PREROUTING ..... -j REDIRECT --to-port 222
如果正确答案不起作用怎么route_localnet
办?...
如果您的内核不包含 的补丁route_localnet
,那么...升级内核!
或者还有其他方法可以通过运行一个在外部接口上侦听并转发流量的进程,将来自一个接口的流量转发到另一个接口上的另一个端口(特别是本地主机)。
netcat
( nc
)、xinetd
和ssh
(或许还有更多)都是能够执行此操作的程序示例(尽管选择ssh
会很奇怪且无效)。
xinetd
我为此编写了一个配置。现在该服务会自动启动:
# cat /etc/xinetd.d/z-from-outside
# default: off
# description: Forward connections to the z port.
service z-from-outside
{
disable = no
socket_type = stream
type = UNLISTED
wait = no
user = nobody
bind = vaio.ob
port = 7070
redirect = localhost 7070
}
#
Run Code Online (Sandbox Code Playgroud)
(vaio.ob
是该主机在外部网络接口上的名称。)
之后service xinetd reload
,让我们检查它是否正在监听:
# lsof -i -P | fgrep 7070
xinetd 556 root 6u IPv4 1797906 0t0 TCP vaio.ob:7070 (LISTEN)
sshd 27438 tun_zzoom 4u IPv4 1059100 0t0 TCP localhost.localdomain:7070 (LISTEN)
#
Run Code Online (Sandbox Code Playgroud)
事实上,联系确实存在!
归档时间: |
|
查看次数: |
96631 次 |
最近记录: |