ecs做NAT共享EIP

举报
黄生 发表于 2022/09/17 22:26:09 2022/09/17
【摘要】 华为云有NAT服务、分为公网NAT和私网NAT,私网NAT是连接2个内部网络的。公网NAT价格不是很便宜:如果按需的话,每天12元。假如这里有一个需求,就类似于我们家庭网络多台机器共享一个运营商出口上网一样,可以自己使用iptables来实现。对应于华为云的服务就是公网NAT服务。同时我们还希望能够直接通过ssh访问到VPC里的ECS。网络结构是这样的:2台ECS,分别是10.0.0.27 ...

华为云有NAT服务、分为公网NAT和私网NAT,私网NAT是连接2个内部网络的。
公网NAT价格不是很便宜:
image.png

如果按需的话,每天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是包年包月的,还可以有一些性价比。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。