需求场景:
内网两台linux服务器,其中一台em2口配有公网ip可以直连并访问外网,另一台只有内网ip并无法访问外网。如何让后者通过前者获取访问外网的能力呢?
这个需求在一些没有硬件路由和防火墙的环境中和一些公有云中会碰到,不巧大嘴近来碰到一个。
我们假设主机A和主机B。主机A的em1口配有内网ip192.168.1.1,em2口配置有公网ip1.1.1.1,主机B则只有em1口的192.168.1.2;
现在在主机B上,是无法直接上网的,但主机A可以,所以我们可以让B通过A做转发来访问外网。
如何做到让内网ip通过外网访问呢,我们知道需要配置SNAT,把ip地址转换为公网ip才行。
之前大嘴整理了关于这方面的两个文章:
【linux】iptables创建dnat、snat端口转发、【系统集成】linux和windows的路由转发
但这里和以上两个需求有有些不同,因为这里主机A本身就可以通过自己的公网ip直接访问外网。
我们只需要开启主机A的路由转发功能,然后配置SNAT,把主机B来的请求流量源地址转换为主机A的1.1.1.1,然后把主机B的网关指向主机A的192.168.1.1,便可以直接访问外网了,事实上这里主机A充当了硬件路由或防火墙的角色。
♠iptables的SNAT转发做路由网关:
①、开启主机的路由功能:
echo 1 >/proc/sys/net/ipv4/ip_forward
②、给主机A配置SNAT:
iptables -t nat -I POSTROUTING --src 192.168.1.2 -o em1 -j SNAT --to 1.1.1.1
③、给主机B配置默认网关:
ip route replace default via 192.168.1.1
至此,主机B便可以访问外网,如果想更完整的访问外部资源,可以给B配置个DNS;
当然如果内网还有其它的服务器也没有外网,均可以通过这个方法来获取外部资源。
只需把上面步骤②稍作修改,源地址指向某个内网网段即可,然后每台服务器网关都指向主机A;
iptables -t nat -I POSTROUTING --src 192.168.1.0/24 -o em1 -j SNAT --to 1.1.1.1
如果这里能再添加一些其它的端口限制策略,它就是一台软墙,适合小团队使用,本篇博文则是满足需求的第一步,让内网可以上网。
(今天的分享就到这里,如果您有高见或好的分享,记得留言哦!)