微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux更改源IP地址的传入流量

我有一个在端口X上运行的Web服务.它从来没有打算在本地网络外运行,但我想通过Internet访问它.因此,我需要将所有传入数据包的源IP地址更改为本地数据包(例如,192.168.2.100).否则,Web服务会响应错误.

所以这就是我需要的:

如果我将带有公共IP X的家用计算机的数据包发送到服务器的公共IP地址Y,则需要将源IP地址(在这种情况下为X)更改为本地IP地址(例如,192.168.2.1) .之后,应将数据包传递到在端口80上的同一服务器上运行的Web应用程序.

解决方法

好的,现在我想我明白你想要什么.这是一个非常特殊的情况,与我之前发布的常规端口转发方法不同(见下文).以下规则应该这样做.

传入数据包上的SNAT

我假设如下:

>< x>:服务器的公共IP
>< y>:客户端的公共IP
>< a>:服务器的内部IP(192.168.2.1)
>< b>:客户端的内部“伪造”IP(192.168.2.100)
>< if>:外部接口(即eth0)

仅限SNAT

此规则将更改数据包的源地址:

iptables -t nat -A INPUT -p tcp -d <x> --dport 80 -s <y> -j SNAT --to-source <b>

合并DNAT和SNAT:

这些规则将改变数据包的源和目标地址:

iptables -t nat -A PREROUTING -i <if> -p tcp -d <x> --dport 80 -s <y> \
    -j DNAT --to-destination <a>:80
iptables -t nat -A INPUT -p tcp -d <a> -s <y> --dport 80 \
    -j SNAT --to-source <b>

不要忘记接受过滤表中的数据包.

通常的DNAT端口转发规则进行比较(无SNAT):

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 \
    -j DNAT --to-destination 192.168.2.1:80

这会将外部接口(在此示例中为eth0)上的传入数据包上的端口8080转发到内部主机192.168.2.1到端口80.将接口,协议,dport和目标替换为您的设置.

此规则将接受修改的数据包:

iptables -A FORWARD -i eth0 -p tcp -d 192.168.2.1 --dport 80 -j ACCEPT

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐