我有一个在 localhost 上运行的服务,它监听端口 localhost:10000
我想要做的是将所有进入 publicip:15000 的流量转发到 localhost:10000 ,其中更改服务配置不可用。
服务仅侦听本地主机,但流量来自外部。
顺便说一句,服务在linux上运行。
编辑; 我尝试像这样添加 NAT 规则,但我无法成功。
配置 NAT 我做了;
iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables --table nat --append POSTROUTING --out-interface lo -j MASQUERADE
iptables -A FORWARD -i eth0 -o lo -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i lo -o eth0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
service ufw restart
并开始路由执行这个;
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 15000 -j DNAT --to 127.0.0.1:10000
你觉得我错过了什么?
提前致谢
巴里斯
环回流量的 DNAT 似乎是不可能的。
环回流量跳过 PREROUTING 和 OUTPUT 链。
RFC 5735(第 3 页)说网络
127.0.0.0/8
无法在主机本身之外路由:此外,流量
loopback interface
被视为Martian Packets
:解决方法:
一个简单的替代方法是
inted
在服务器端使用服务器及其redirect
功能。这样,您可以在
inetd
其中定义 un 服务并设置该服务将侦听的端口。然后,设置redirect
指令将此端口绑定到127.0.0.1:port
.在下面的示例中,我将使用
xinetd
(在 Ubuntu 12.04 LTS 上)绑定mysql
运行在以下服务器上的服务器127.0.0.1:10000
:第 1 步:安装软件包:
apt-get install xinetd
第二步:编辑配置文件
/etc/xinetd.conf
添加类似于以下的服务定义:
第 3 步:重新启动
xinetd
守护进程:service xinetd restart
第 4 步:让我们检查端口上的侦听器
15000
:第 5 步:添加您的
iptables
规则:让我们测试一下:
为了进行测试,我设置
mysql
了监听127.0.0.1:10000
。我将尝试通过xinetd
port 上的服务访问它15000
。首先,在服务器端,我确保
mysql
服务器只在监听127.0.0.1:10000
:然后,在客户端,让我们检查是否可以使用端口进行连接
15000
:看来我们可以!:)
让我们尝试连接到
mysql
服务器:完毕 !