You need to enable JavaScript to run this app.
导航

创建转发机实例访问VPC内无公网IP的资源

最近更新时间2023.12.26 10:48:04

首次发布时间2022.05.11 13:48:53

本文将介绍通过转发服务器访问VPC内私网资源。

实验介绍

火山引擎中很多资源为了保证其访问安全并没有提供外网访问,出于开发和调试的需要,特定情况下需要从本地通过互联网访问到相关资源并进行代码调试,本次实验主要用以解决此类问题。在开始实验前需要先进行如下准备工作:

  • 创建一个RDS MySQL实例
  • 创建一个操作系统为CentOS 7的ECS实例
  • 要求RDS MySQL实例和ECS实例在同一VPC中

alt

关于实验

预计部署时间:60分钟
级别:初级
相关产品:云服务器
受众:通用

操作步骤

步骤一: 创建RDS MySQL实例并进行配置

1. 登录MySQL控制台创建实例

alt

2. 配置白名单用以允许其他实例访问

添加VPC子网网段为白名单IP
alt
alt

3. 查看RDS MySQL域名

在RDS 实例详情页面,点击连接管理,查看并复制RDS实例的内网地址
alt

步骤二:创建ECS实例并设置为跳转机

1. 创建一台操作系统为CentOS 7的ECS实例,并为其绑定公网IP

关于如何创建ECS实例,请参考此文档

2. 查看RDS实例IP和ECS实例私网IP

登录刚刚创建完成的ECS实例后,通过ping命令对RDS MySQL的内网域名进行解析

ping mysqla1e17****.rds.ivolces.com
PING mysqla1e17a89490b.rds.ivolces.com (192.168.0.127) 56(84) bytes of data.
64 bytes from 192.168.0.127 (192.168.0.127): icmp_seq=1 ttl=64 time=0.106 ms
64 bytes from 192.168.0.127 (192.168.0.127): icmp_seq=2 ttl=64 time=0.123 ms
64 bytes from 192.168.0.127 (192.168.0.127): icmp_seq=3 ttl=64 time=0.097 ms
^C
--- mysqla1e17a89490b.rds.ivolces.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.097/0.108/0.123/0.016 ms

[root@iv-ybo6ueptm58rx7ugcuxp ~]# ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:4c:f5:e9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.128/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe4c:f5e9/64 scope link 
       valid_lft forever preferred_lft forever

3. 设置iptables规则,实现IP和端口的转发

PREROUTING链中的--to-destination应为RDS MySQL解析到的IP地址
POSTROUTING中的--to-source应为转发机本身的私网IP地址

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination 192.168.0.127:3306

iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.127 --dport 3306 -j SNAT --to-source 192.168.0.128

4. 设置转发机实例绑定的安全组

注意需要设置转发机实例绑定的安全组,允许3306端口访问,并且源IP设置为0.0.0.0/0

5. 客户端尝试验证是否可以连接到RDS MySQL实例

$ telnet 180.184.48.156 3306
Trying 180.184.48.156...
Connected to 180.184.48.156.
Escape character is '^]'.
J
8.0.26�(2g<cx9D*�!
                  ]g\Mlf!\q.:zmysql_native_password^CConnection closed by foreign host.

如果您有其他问题,欢迎您联系火山引擎技术支持服务