linux下如何将连接从一个接口转发到另一个接口

4 linux route iptables

我有一个 linux box,它有两个网络接口,eth0,eth1。从 eth1 我可以访问内部网站,比如在端口 8080 下。从盒子外面,我无法访问该网络。我的问题是,有没有办法从盒子外面设置一些东西,似乎有一个 web 服务器在端口 8080 中运行,当我连接到它时,它会自动转发到 eht1 内部站点?我尝试启用 ip forward 并添加静态路由,但它不起作用。谢谢。

mdr*_*iel 7

这个盒子是否在这些接口之间路由流量?根据你写的内容,我假设 eth0 上有一个连接到 Internet 的公共网络,而 eth1 上有一个私有本地网络。

如果这就是设置并且您想从 Internet 访问本地网络上的网络服务器,则必须使用网络地址转换 (NAT)。

基本上你需要在“外部”接口上计算一个外部 IP 地址并添加 iptables 规则:

iptables -t nat -A PREROUTING -p tcp -d X.X.X.X --dport 8080 -j DNAT --to Y.Y.Y.Y:8080
Run Code Online (Sandbox Code Playgroud)

XXXX 是外部地址,而 YYYY 是运行网络服务器的内部地址。在这种情况下,您还必须确保允许前向链中的流量:

iptables -A FORWARD -p tcp -d Y.Y.Y.Y --dport 8080 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

您的盒子必须为此启用转发:

sysctl net.ipv4.ip_forward=1 
Run Code Online (Sandbox Code Playgroud)

或者

echo 1 > /proc/sys/net/ipv4/ip_forward
Run Code Online (Sandbox Code Playgroud)

不确定这是否能回答您的问题,但在您的问题中提供的细节很少。