ecs做NAT共享EIP
华为云有NAT服务、分为公网NAT和私网NAT,私网NAT是连接2个内部网络的。
公网NAT价格不是很便宜:
如果按需的话,每天12元。
假如这里有一个需求,就类似于我们家庭网络多台机器共享一个运营商出口上网一样,可以自己使用iptables来实现。对应于华为云的服务就是公网NAT服务。
同时我们还希望能够直接通过ssh访问到VPC里的ECS。
网络结构是这样的:
2台ECS,分别是
10.0.0.27 它具有一个EIP
10.0.0.97 它没有EIP
需求是让10.0.0.97也能访问公网,而我们也能通过那一个EIP访问到10.0.0.97的ssh服务。
首先这2个ECS的网络是通的,他们直接可以直接通过网络访问到。
安全组该放开的要放开,这里不多说。
然后修改一下10.0.0.97的基本网络配置(默认是dhcp),主要是将它的网关改为10.0.0.27(注意这里的IP地址,不要和华为云控制台网页上设置的IP不一致)
DEVICE="eth0"
#BOOTPROTO="dhcp"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Ethernet"
#PERSISTENT_DHCLIENT="yes"
IPADDR=10.0.0.97
PREFIX=24
GATEWAY=10.0.0.27
DNS1=100.125.136.29
DNS2=100.125.1.250
DEFROUTE=yes
service network restart会报错
Redirecting to /bin/systemctl restart network.service
Failed to restart network.service: Unit network.service not found.
换systemctl也同样报错,没关系,重启ECS可以让网络配置生效,然后看一下路由
[root@ecs-hce ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.27 0.0.0.0 UG 100 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
在然后在10.0.0.27设置iptables规则,设置好了后是这样:
[root@ecs-d589 ~]# iptables -nvL -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
5 248 DNAT tcp -- eth0 * 0.0.0.0/0 10.0.0.27 tcp dpt:24 to:10.0.0.97:22
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1835 125K MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
保存下来的规则是这样:
# Generated by iptables-save v1.8.4 on Sat Sep 17 22:04:12 2022
*filter
:INPUT ACCEPT [116143:173944165]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Sat Sep 17 22:04:12 2022
# Generated by iptables-save v1.8.4 on Sat Sep 17 22:04:12 2022
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sat Sep 17 22:04:12 2022
# Generated by iptables-save v1.8.4 on Sat Sep 17 22:04:12 2022
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d 10.0.0.27/32 -i eth0 -p tcp -m tcp --dport 24 -j DNAT --to-destination 10.0.0.97:22
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Sat Sep 17 22:04:12 2022
然后就可以满足需求了。
10.0.0.97可以访问外网,就好像它有了自己的EIP一样。
用ssh客户端访问EIP的24端口,可以ssh连接到10.0.0.97。
最后说一下,只是一个实验,与实际上给10.0.0.97分配一个EIP相比,只是少了一个EIP的占用的费用。
直接给10.0.0.97分配一个EIP,还是方便很多。
又去查了一下:
3、按小时计费,需要单独收取弹性公网IP保有费和固定带宽费,如果弹性公网IP绑定了ECS、BMS、ELB等实例,则免除保有费
。(0.02元/小时)
其实没有少任何费用。
所以,如果共享的EIP是包年包月的,还可以有一些性价比。
- 点赞
- 收藏
- 关注作者
评论(0)