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

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...