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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
函数计算FC,每月15万CU 3个月
简介: ## 前言 很多时候为了做代码调试,我们有需求将某个域名所映射的地址临时映射成其他 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 来实现 全局无入侵网络代理 ,这两个环境变量都可以起到类似的作用。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
7天前
|
网络协议 Linux Docker
在Linux中,如何指定dns服务器,来解析某个域名?
在Linux中,如何指定dns服务器,来解析某个域名?
|
7天前
|
域名解析 网络协议 API
【API管理 APIM】APIM集成内部VNet时,常遇见的关于自定义DNS服务问题。
【API管理 APIM】APIM集成内部VNet时,常遇见的关于自定义DNS服务问题。
|
7天前
|
域名解析 存储 缓存
在Linux中,DNS进行域名解析的过程是什么?
在Linux中,DNS进行域名解析的过程是什么?
|
8天前
|
域名解析 网络协议 Linux
在Linux中,如何配置DNS服务器和解析服务?
在Linux中,如何配置DNS服务器和解析服务?
|
16天前
|
负载均衡 网络协议 安全
解析网络流量管理方案:简化基于云的DNS负载均衡
解析网络流量管理方案:简化基于云的DNS负载均衡
36 1
|
22天前
|
域名解析 监控 负载均衡
【域名解析DNS专栏】智能DNS解析:自动选择最快服务器的奥秘
在互联网中,智能DNS解析作为一项先进技术,根据用户的网络环境和服务器负载情况,自动挑选最优服务器进行域名解析,显著提升访问速度与体验。其工作原理包括实时监控服务器状态、分析数据以选择最佳路由。通过负载均衡算法、地理位置识别及实时性能测试等策略,确保用户能获得最快的响应。这项技术极大提高了互联网服务的稳定性和效率。
59 5
|
22天前
|
域名解析 负载均衡 网络协议
【域名解析DNS专栏】DNS解析中的Anycast技术:原理与优势
在互联网中,DNS将域名转换为IP地址至关重要。Anycast技术通过将同一IP地址分配给多台地理上分散的服务器,确保客户端总能连接到最近且最轻载的服务器,从而加速DNS解析、实现负载均衡、提升抵御DDoS攻击的能力及服务高可用性。通过动态路由协议如BGP实现,Anycast极大地增强了DNS系统的性能和稳定性。
40 2
|
1天前
|
运维 Serverless 调度
函数计算产品使用问题之怎么在HTTP触发的函数里添加或读取自定义头部
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6天前
|
网络协议 微服务
【Azure 微服务】基于已经存在的虚拟网络(VNET)及子网创建新的Service Fabric并且为所有节点配置自定义DNS服务
【Azure 微服务】基于已经存在的虚拟网络(VNET)及子网创建新的Service Fabric并且为所有节点配置自定义DNS服务
|
7天前
|
域名解析 缓存 负载均衡
在Linux中,自定义解析域名的时候,可以编辑哪个⽂件?是否可以⼀个ip对应多个域名?是否⼀个域名对应多个ip?
在Linux中,自定义解析域名的时候,可以编辑哪个⽂件?是否可以⼀个ip对应多个域名?是否⼀个域名对应多个ip?

热门文章

最新文章

相关产品

  • 函数计算
  • 推荐镜像

    更多