### 方案原理
该方案的原理是将一个和公网IP绑定的服务器作为代理转发网络请求。具体来说,我们可以通过以下步骤实现:
1. 在已绑定公网IP的服务器(以下简称Master)上建立一个隧道,将流量转发到未绑定公网IP的服务器(以下简称Worker)。 2. 修改Worker的路由表,使其使用Master作为默认网关。 3. 在Master上配置iptables,实现源网络地址转换(SNAT),将来自Worker的请求伪装成Master的公网IP。
### 操作步骤
#### 步骤一:建立隧道
由于两台服务器在同一内网,我们可以通过默认网卡在它们之间建立一个隧道。
1. 在Master上执行以下命令创建一个IP隧道: ``` ip tunnel add worker1 mode ipip remote 192.168.0.196 local 192.168.0.197 ``` 2. 启动新创建的隧道: ``` ip link set worker1 tunnel up ``` 3. 为创建的隧道绑定ip地址: ``` ip addr add 192.168.3.100 peer 192.168.3.101 dev worker1 ```
#### 步骤二:修改路由表
1. 在Worker上执行以下命令创建一个IP隧道: ``` ip tunnel add master_tun mode ipip remote 192.168.0.197 local 192.168.0.196 ``` 2. 启动新创建的隧道: ``` ip link set master_tun up ``` 3. 为创建的隧道绑定IP地址: ``` ip addr add 192.168.3.101 peer 192.168.3.100 dev master_tun ``` 4. 验证隧道是否成功建立,分别从Master和Worker向对方的隧道IP地址发送ping命令。
#### 步骤三:配置iptables
在Master上配置iptables,实现SNAT: ``` iptables -t nat -A POSTrouting -s 192.168.3.0/24 -j SNAT --to-source [Master公网IP] ``` 其中,`[Master公网IP]`是Master服务器绑定的公网IP地址。
#### 步骤四:验证结果
在Worker上ping一个外网地址(如百度),如果能够成功ping通,说明方案已成功实现,Worker可以通过Master访问外网。
### 注意事项
1. 确保Master开启了路由转发功能。修改sysctl.conf文件并配置`net.IPv4.ip_forward = 1`,然后执行`sysctl -p`使其生效。 2. 检查网络策略,确保允许来自Master的请求。
通过以上步骤,我们可以实现让未绑定公网IP的服务器访问外网,从而满足特定场景下的需求。
在阿里云、腾讯云等云平台购买多台服务器时,出于成本考虑,不会为每台服务器配置公有IP。这就带来了一个问题,没有公网IP的服务器无法访问外网。本文介绍了一种可选方案,即让未绑定公网IP的服务器接入外网,前提是所购买的服务器中至少有一台绑定了公网IP。
下面是基本原理和步骤。对网络比较了解的朋友可能一眼就知道是怎么回事了。详细的操作过程后面会介绍。
基本原理是用一个和公网IP绑定的服务器作为代理转发网络。
基本步骤假设有两台服务器:
操作步骤如下:
本文详细介绍了云平台采购节点的两个例子:
主节点绑定了公网IP,可以访问外网,工作节点没有绑定公网IP,不能访问外网。
通过ip route show命令查看两台主机的路由表,有如下记录:
默认通过192.168.0.253 dev eth0
也就是说,两台主机都默认使用192.168.0.253作为转发请求的路由,因此我们可以大致猜测网络拓扑如下:
当然,真实的网络拓扑会比较复杂。这里,只对两台购买的主机进行了一个简化。
我们现在要做的是,worker1节点可以通过主节点作为代理访问外网。
步骤1:建立从主节点到worker1节点的隧道。因为两台机器在一个内网,可以互相通信,所以我们可以通过默认的网卡在两台主机之间建立一个隧道。
在主节点上执行以下命令
#创建一个ipip类型的虚拟网卡# IP tun add[虚拟网卡名称]mode ipip remote[对等IP地址]local[本地IP地址]IP tunnel addworker 1 _ tunnel mode IP remote 192 . 168 . 0 . 196 local 192 . 168 . 0 . 197#启动新创建的虚拟网卡IP link set worker 1 _ tunnel up#为创建的虚拟网卡绑定IP地址 Peer[对端绑定的IP地址]Dev[本地机器绑定的虚拟网卡的名称]IP Add Add 192 . 168 . 3 . 100 Peer 192 . 168 . 3 . 101 Dev Worker 1 _
这样,可以执行ip addr show命令来查看下面的附加网卡:
可以看到网卡绑定了IP: 192.168.3.100。
类似地,在worker1节点上执行以下命令
ip隧道添加master_tunl模式ipip remote 192 . 168 . 0 . 197 local 192 . 168 . 0 . 196IP链路设置master _ tunl upIP add add 192 . 168 . 3 . 101 peer 192 . 168 . 3 . 100 dev master _ tunl
执行ip addr show命令,查看以下网卡是否已添加到worker1节点:
可以看到网卡绑定了IP: 192.168.3.101。
现在,让我们验证隧道是否成功建立,并且在主节点上执行ping 192.168.3.101。
在同一worker1节点上Ping 192.168.3.100。
如您所见,两台主机已经可以通过设置的IP相互访问,因此两台主机之间的隧道成功建立。
步骤2:修改worker1节点的路由表,使主节点成为worker1节点默认路由的网关。我们可以首先执行ip route show来检查当前的默认路由。
此路由显示worker1节点上的默认路由使用192.168.0.253作为默认网关。
首先,执行ip route del default删除默认网关。
然后,通过192.168.3.100 dev master _ tunnel设置执行IP route add default,将主节点用作默认网关。注意,创建的master _ tunnel虚拟网卡在这里被用作网络设备。
步骤3:在主节点上,通过iptables工具,对来自我们创建的隧道的请求进行Snat转换。因为来自worker1的请求的源地址是192.168.3.101,这是一个内部网络地址,所以来自外部网络的请求在没有NAT转换的情况下无法到达worker1节点。
我们执行以下命令来设置nat
#我们设置的隧道段是192.168.3.0/24。下面的设置会将源地址在192.168.3.0/24段的请求发送到snat中,#源地址会伪装成出口网卡的IP地址iptables-t NAT-a posting-s192..
以上步骤全部完成。我们来验证一下。
在worker1节点ping Baidu.com。
您可以看到worker1节点可以访问外部网络。
问题:按照上述步骤操作后,不能访问外网吗?
检查主节点是否开启了路由转发功能。该方案要求转发节点开启转发功能。
打开模式: