如何在函数计算内部中自定义 DNS 解析

本文涉及的产品
简介: ## 前言 很多时候为了做代码调试,我们有需求将某个域名所映射的地址临时映射成其他 IP。 例如我们需要 mock 某个三方服务代码的异常情况,我们可能自己构造一个 HTTP server,实现异常代码返回,用于函数计算中对该异常的处理。

前言

很多时候为了做代码调试,我们有需求将某个域名所映射的地址临时映射成其他 IP。

例如我们需要 mock 某个三方服务代码的异常情况,我们可能自己构造一个 HTTP server,实现异常代码返回,用于函数计算中对该异常的处理。

在本地调试的环境下,通常我们最直接的做法是修改 /etc/hosts 文件,例如:

127.0.0.1 localhost
255.255.255.255 broadcasthost

127.0.0.1 api.example.com

如果修改 /etc/hosts 则需要 root 权限,如果在多用户共享的Linux机器上,直接修改这个还会干扰其他开发人员的正常使用,如何做到普通用户级别的自定义 DNS 解析呢?

实现原理

我们知道,无论 python/node/php 在底层解析 DNS 时最终会调用 glibc 动态链接库中的函数 getaddrinfogethostbyname,最终会尝试读取 /etc/hosts 文件来做解析。那么有没有办法把默认的这个路径给改掉呢?

当然,我们可以 hook C 语言的动态链接库,将对应这些函数给换掉。

在函数计算中,用户所拥有的 user 是普通账号权限,要实现类似的功能也可以利用这个原理来做,接下来这里介绍一下在函数计算中的如何自定义 DNS 解析。

具体实现

    1. 我们先找到 Linux 系统中 /lib/x86_64-linux-gnu/libnss_files.so.2
    1. 将这个文件 copy 一份到项目的根目录中
    1. 用 vim 打开根目录的这个文件
    1. 找到 /etc/hosts (注意到这里是10个字节),并改成为 /code/host (这里也需要是10个字节,不多不少)
    1. 在代码根目录再加一个名为 host (注意是 host 而非 hosts)的文件,里面格式和 /etc/hosts 一样
    1. 更新函数代码
    1. 在函数计算的控制台上为函数增加环境变量:
    • keyLD_LIBRARY_PATH
    • value/code/

对于想偷懒的同学,可以直接点击 libnss_files.so.2 (MD5 = a47453fafb5ec540ba91b6347ec9d82e) 直接下载,跳过第1-4步。

更多参考

除了 LD_LIBRARY_PATH 这个环境变量,我们之前在 这里 还介绍过如何通过 LD_PRELOAD 来实现 全局无入侵网络代理 ,这两个环境变量都可以起到类似的作用。

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
11天前
|
运维 JavaScript Java
Serverless 应用引擎产品使用之在阿里云函数计算中想为两个不同的服务分别开通自定义域名如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
20 1
|
3天前
|
域名解析 存储 缓存
Linux中搭建DNS 域名解析服务器(详细版)
Linux中搭建DNS 域名解析服务器(详细版)
|
10天前
|
缓存 负载均衡 网络协议
【亮剑】一次完整的 HTTP 请求过程,包括 DNS 解析、TCP 握手、HTTP 请求和响应等环节
【4月更文挑战第30天】本文介绍了HTTP请求的重要性和详细过程。首先,DNS解析将域名转换为IP地址,通过递归和迭代查询找到目标服务器。接着,TCP三次握手建立连接。然后,客户端发送HTTP请求,服务器处理请求并返回响应。最后,理解这个过程有助于优化网站性能,如使用DNS缓存、HTTP/2、Keep-Alive、CDN和负载均衡等实践建议。
|
10天前
|
网络协议 Windows
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
|
11天前
|
人工智能 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中使用自定义字体如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
138 0
|
11天前
|
弹性计算 运维 监控
Serverless 应用引擎产品使用之在阿里函数计算中,函数计算的的自定义域名的路由节约时间如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
141 0
|
11天前
|
运维 IDE Serverless
Serverless 应用引擎产品使用之阿里函数计算中,阿里云容器镜像服务(Container Registry)中创建自定义镜像,然后将其部署到FC上如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
27 0
|
11天前
|
人工智能 运维 Serverless
Serverless 应用引擎产品使用之阿里函数计算中3.0的函数只加自定义域名没有任何触发器的意义如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
22 1
|
11天前
|
运维 网络协议 安全
Serverless 应用引擎产品使用之阿里云函数计算中添加自定义域名进行域名DNS验证如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
20 1
|
11天前
|
运维 监控 Serverless
Serverless 应用引擎产品使用之阿里函数计算中在自定义环境下用debian10运行django,用官方层的python3.9,配置好环境变量后发现自定义层的django找不到了如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
21 3

热门文章

最新文章

相关产品

  • 函数计算
  • 推荐镜像

    更多