Linux ARP代理 与 NAT

有时候我们会在一个已有网络(10.10.10.0/24)内组建一个实验网络(192.168.1.0/24),网络结构如上图所示。

假设我们不能控制(修改)A网络内除D主机以外的系统配置,但可以完全控制网络B内的主机。

此时Server D实际上要承担一个路由的角色(它有两张网卡分别在两个网络A,B内)

所以先打开其上的内核路由转发功能,修改/etc/sysctl.conf中的如下配置

net.ipv4.ip_forward = 1

保存后应用查看

# sysctl -p
net.ipv4.ip_forward = 1

另外需要保证Server D上的路由表配置正确,这里我们假设D上10.10.10.103所在的接口为eth0, 而192.168.1.1所在的接口为eth1

最后将网络B内的主机的默认网关都设置为Server D的192.168.1.1地址,到此准备工作已经完成。下面可以采用不同的方法来使得网络B和网络A中的主机实现不同程度的互联。

SNAT

如果想让B网络内的所有主机单向访问A网络内的资源可以在Server D上做一个NAT(SNAT):

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

这种方法就是最常用的NAT,内部网络B中的主机可以主动发起请求访问的外网A中的资源,实现内外网主机通信,但是外网A内的主机无法主动与内网主机建立连接。内网B中的主机没有A网内的独立IP。

如果只想让某台B网中的主机访问A网,则可以限定来源IP,具体可以参考iptables手册:

iptables -t nat -A POSTROUTING -s 192.168.100.100 -o eth0 -j MASQUERADE

SNAT + DNAT + ARP代理 = 浮动IP

如果我们想为网络B内的Server E分配一个IP如10.10.10.104,使得网络A内的主机可以直接访问主机E

此时我们可以在Server D上先做一个SNAT:

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.100 -j SNAT --to-source 10.10.10.104

这样网络A网络收到Server E发出的包时,看到的IP就是10.10.10.104,其响应也会回发给这个地址

然后我们在Server D上做一个DNAT:

 iptables -t nat -A PREROUTING -i eth0 -d 10.10.10.104 -j DNAT --to-destination 192.168.1.100

这样Server D收到目的IP为10.10.10.104的包时就会修改目的IP为网络B内的Server E的IP(192.168.1.100),自然的按照Server D上的路由规则这个包会从接口eth1出去,经过交换机B,到达Server E。

现在还存在一个问题,我们不能修改网络A内的主机配置,怎么做才能让IP为10.10.10.104的包发到Server D来(因为主机D自己的IP是10.10.10.103)。如果我们自Server D上再插入一张网卡,让后将其地址设为10.10.10.104就可以,不过我们没有必要这么做。我们在主机D的eth0接口上加入一个次级地址即可

ip addr add 10.10.10.104/24 dev eth0

这样网络A内的主机在使用ARP协议查询10.10.10.104所对应的MAC地址时,Server D就能做出响应,发送一个虚拟的MAC地址,于是发往10.10.10.104的包就会到达主机D,在进行上述的DNAT步骤,两边就可以互通了。

服务端口映射 SNAT + DNAT

浮动IP的方案需要占用一个网络A的IP,且会完全暴露主机E,有时可以通过端口映射向外部网络A暴露网络B内的服务,如将Server D上的2222端口与Server E上的22端口建立映射,这样网络A内的主机访问10.10.10.103:2222实际就是访问网络B内的主机192.168.100:22。

Linux ARP代理 与 NAT

时间: 2024-10-21 18:06:38

Linux ARP代理 与 NAT的相关文章

Juniper Junos SRX NAT ARP代理

SRX所使用的地址池使用的地址在SRX是虚拟的,它不是一个真正物理存在的.那么这个地址的可达性必然依赖于简单的IP路由查找.SRX也支持将自己的物理接口配置到Pool中,如图5-8. Figure5-8. Source NAT with ProxyARP 为保证这些Pool的可达性,Proxy ARP功能使能.由于Pool内有可路由的IP网络(或者SRX设备本身是不可达),关键是要在以太网层面(二层)提供可达性,而不是IP层的可达性. 最后一跳IP路由设备必须在本地以太网络上发送一个ARP请求,

Linux设置代理上网

Linux设置代理上网 在Linux中设置代理上网只需要设置个用户变量就可以,有如下几种代理方式: 代理方式 变量名 http代理 http_proxy https安全代理 https_proxy ftp代理 ftp_proxy 不使用代理的IP no_proxy 1.立即生效 [[email protected] ~]# export http_proxy=itxxx:123456@110.199.131.137:909 代理方式  =  用户名 : 密码 @ 代理地址:端口 #http_pr

linux lvs集群nat模式(比上一篇的lvs nat实用)

这是一篇以apcache服务为例介绍lvs的nat模式配合keepalived实现的方案.实验拓扑图如下所示,虚线上面的大图可以看成是虚线下面"服务器群"的放大版: 本实验共用到4台linux虚拟服务器,其中两台rhel5.6作为主从HA(keepalived)服务器,另外两台rhel4.6模拟Apache服务器--用两台Apache服务器模拟多台Apache服务器. 实验原理是,用Apache服务器为代表模拟实际用到的服务器,用两台Apache模拟多台Apache,所有的Apache

使用ssh隧道+privoxy实现Linux全局代理

使用ssh隧道+privoxy实现Linux全局代理 ssh简介 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题.SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台.SSH在正确使用时可弥补网络中的漏洞.SSH客户端适用于多种平台.几乎所

ARP/代理ARP

1.ARP首先讲到ARP,ARP是地址解析协议,它的作用是在以太网环境下,通过3层的IP地址来找寻2层的MAC地址,得到一张ARP缓存表.转发数据的时候根据ARP缓存表来进行传输.下图详细说明数据传输时ARP是如何一步步操作的.在配置IP地址后,不做任何ping操作,ARP缓存表是这样的: 当PC去ping R1的时候,你会发现第一个丢包了.像这样R1#ping 192.168.1.2Type escape sequence to abort.Sending 5, 100-byte ICMP E

Linux Bridge的IP NAT细节探析-填补又一坑的过程

前序 近日温州皮鞋厂老板正在忙着学习Linux Bridge以及诸多虚拟网卡相关的东西,老湿给了一些指导,但最根本的还要靠温州老板自己.就好像有仙灵在聆听心声,我正因为温州老板的缘故一而再再而三地怀念曾经玩转Linux Bridge,Linux Netfilter的那段痛并快乐着的时光,另外一个好玩的东西恰在此时切入. 大概有三年多没有玩Linux Bridge了,甚是想念.感谢同事给我一个Bridge方面的疑难杂症让我诊断!        凭着经验,很快搞定了问题,但是如果就此了断怕是在多年后

Linux -- 系统安全之NAT及防火墙的混合应用

LINUX凭借其稳定性.安全性和代码开放在这几年中,风靡全球:作为一种类UNIX系统,Linux正在互联网的各个层面得到应用,从科学计算到银行取款机,从网络web服务到高层的Oracle 数据库应用.都可以看到linux的影子.而由于Linux遵循于GPL协议(公共软件许可证),任何人可以得到并且修改它的源代码,所以他的安全性相较于其他的非开源系统来说要高的多:并且它可以从网络中免费下载.从这2点来说他非常适合用于网络信息闸(软路由或网关)和自制防火墙(事实上国内的硬件防火墙厂商都是用工业X86

Linux全局代理

一般用Linux的话都是用全局代理都是用http_proxy以及https_proxy这两个环境环境变量来实现的, 但是缺点是这种方式并不是真正的全局代理, 即使设置了代理的话,对于某些应用还是无效的,比如w3m,而且这种方式并不支持socks协议. 我在实验室环境使用shadowsocks作为代理用来访问外网, 没有用来翻墙,原因是个人感觉shadosocks比其他socks软件好部署,虽然加密损失点性能,但是table加密那点计算量也不算什么.在windows环境的话用proxifity就可

Linux arp命令

一.简介 arp命令用于操作主机的arp缓冲区,可以用来显示arp缓冲区中的所有条目.删除指定的条目或者添加静态的ip地址与MAC地址对应关系. 二.语法 -a<主机>:显示arp缓冲区的所有条目: -H<地址类型>:指定arp指令使用的地址类型: -d<主机>:从arp缓冲区中删除指定主机的arp条目: -D:使用指定接口的硬件地址: -e:以Linux的显示风格显示arp缓冲区中的条目: -i<接口>:指定要操作arp缓冲区的网络接口: -s<主机