searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

简单配置基于snat的公网网关

2023-10-27 06:28:56
17
0

一、背景

当我们有多台虚拟机时,有权限访问公网的虚拟机(下文简称:公网主机)只有一台,那么其他没有公网的虚拟机(下文简称:内网主机)如果有访问公网的需求,我们应该怎么办呢?

试想一下,如果将内网主机访问公网的流量先送到公网主机,再有公网主机将流量转发到外网,是不是就可以解决这个问题呢?

本文提供了一个简单的方法,使用snat技术将公网主机配置成了一个公网网关,内网主机可以借助公网网关访问公网。

 

一、构建测试环境

公网主机:

具有访问公网能力的虚拟机一台。

 

内网主机:

使用网络命名空间的方式,隔离一个独立的网络来模拟只有内网的虚拟机:

  • 创建命名空间:ip netns add host1
  • host1空间内启动lo回环网卡:ip netns exec host1 ip link set lo up
  • 进入命名空间(可以看成进入了内网主机):ip netns exec host1 bash

 

为公网主机和内网主机添加内网网卡(公网主机上执行):

  • 创建veth pair:ip link add veth0 type veth peer name veth1
  • veth0作为公网主机的内网网卡,veth1作为内网主机的内网网卡
  • 为内网主机添加内网网卡veth1:ip link set veth1 netns host1
  • 为veth1添加ip地址:ip netns exec host1 ip addr add 192.168.1.2/24 dev veth1
  • 启动内网主机网卡veth1:ip netns exec host1 ip link set veth1 up
  • 为公网主机网卡veth0添加ip地址:ip addr add 192.168.1.1/24 dev veth0
  • 启动公网主机网卡veth0:ip link set veth0 up

 

查询公网主机网卡信息并测试访问公网:

 

查询内网主机网卡信息并测试访问公网:

 

二、通过snat将公网主机设置为公网网关

开启转发:

  • 开启ipv4转发:

echo 1 > /proc/sys/net/ipv4/ip_forward

 

设置snat转发规则:

  • 将源ip地址为192.168.1.2的地址转换成公网主机的公网网卡ip地址:

iptables -t nat -A POSTROUTING -s 192.168.1.2/32 -j SNAT --to-source 192.168.134.100

 

查看snat规则:

  • iptables -t nat -S

 

三、将内网访问公网的流量转发到公网网关

内网主机添加默认路由:

将访问公网的流量转发到公网网关192.168.1.1:ip route add default via 192.168.1.1 dev veth1

 

验证内网主机访问公网能力

 

四、总结

本文介绍了一种通过snat方式配置了个公网网关服务器,涉及到的知识面有网络命名空间、路由配置、veth pair等linux的知识,在看文档前需要对这些知识进行初步的了解。

0条评论
0 / 1000
4****m
2文章数
0粉丝数
4****m
2 文章 | 0 粉丝
4****m
2文章数
0粉丝数
4****m
2 文章 | 0 粉丝
原创

简单配置基于snat的公网网关

2023-10-27 06:28:56
17
0

一、背景

当我们有多台虚拟机时,有权限访问公网的虚拟机(下文简称:公网主机)只有一台,那么其他没有公网的虚拟机(下文简称:内网主机)如果有访问公网的需求,我们应该怎么办呢?

试想一下,如果将内网主机访问公网的流量先送到公网主机,再有公网主机将流量转发到外网,是不是就可以解决这个问题呢?

本文提供了一个简单的方法,使用snat技术将公网主机配置成了一个公网网关,内网主机可以借助公网网关访问公网。

 

一、构建测试环境

公网主机:

具有访问公网能力的虚拟机一台。

 

内网主机:

使用网络命名空间的方式,隔离一个独立的网络来模拟只有内网的虚拟机:

  • 创建命名空间:ip netns add host1
  • host1空间内启动lo回环网卡:ip netns exec host1 ip link set lo up
  • 进入命名空间(可以看成进入了内网主机):ip netns exec host1 bash

 

为公网主机和内网主机添加内网网卡(公网主机上执行):

  • 创建veth pair:ip link add veth0 type veth peer name veth1
  • veth0作为公网主机的内网网卡,veth1作为内网主机的内网网卡
  • 为内网主机添加内网网卡veth1:ip link set veth1 netns host1
  • 为veth1添加ip地址:ip netns exec host1 ip addr add 192.168.1.2/24 dev veth1
  • 启动内网主机网卡veth1:ip netns exec host1 ip link set veth1 up
  • 为公网主机网卡veth0添加ip地址:ip addr add 192.168.1.1/24 dev veth0
  • 启动公网主机网卡veth0:ip link set veth0 up

 

查询公网主机网卡信息并测试访问公网:

 

查询内网主机网卡信息并测试访问公网:

 

二、通过snat将公网主机设置为公网网关

开启转发:

  • 开启ipv4转发:

echo 1 > /proc/sys/net/ipv4/ip_forward

 

设置snat转发规则:

  • 将源ip地址为192.168.1.2的地址转换成公网主机的公网网卡ip地址:

iptables -t nat -A POSTROUTING -s 192.168.1.2/32 -j SNAT --to-source 192.168.134.100

 

查看snat规则:

  • iptables -t nat -S

 

三、将内网访问公网的流量转发到公网网关

内网主机添加默认路由:

将访问公网的流量转发到公网网关192.168.1.1:ip route add default via 192.168.1.1 dev veth1

 

验证内网主机访问公网能力

 

四、总结

本文介绍了一种通过snat方式配置了个公网网关服务器,涉及到的知识面有网络命名空间、路由配置、veth pair等linux的知识,在看文档前需要对这些知识进行初步的了解。

文章来自个人专栏
网络知识
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0