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

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算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 来实现 全局无入侵网络代理 ,这两个环境变量都可以起到类似的作用。

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
6月前
|
域名解析 存储 网络协议
域名解析的终极指南:从基础到进阶,彻底搞懂 DNS 记录
域名解析是网站运行的基础,正确配置DNS记录至关重要。本文从基础到进阶全面解析DNS知识,涵盖A、AAAA、CNAME、MX、TXT、CAA等常见记录类型及其应用场景。通过学习,你将了解DNS的工作原理,掌握如何优化域名配置,确保网站与邮件服务高效运行。无论搭建个人博客还是企业官网,本文都能助你轻松搞定域名解析!
1281 0
|
5月前
|
域名解析 网络协议 网络安全
SSL证书验证全攻略:DNS/HTTP/手动解析怎么选?
SSL证书在网络安全中至关重要,1Panel提供三种验证方式:DNS验证、HTTP验证和手动解析。DNS验证便捷,适合CDN网站;HTTP验证快速,需服务器在线;手动解析灵活,但操作复杂。根据需求选择合适确认方式,定期检查证书状态。
668 2
|
7月前
|
域名解析 存储 缓存
深入学习 DNS 域名解析
在平时工作中相信大家都离不开 DNS 解析,因为 DNS 解析是互联网访问的第一步,无论是使用笔记本浏览器访问网络还是打开手机APP的时候,访问网络资源的第一步必然要经过DNS解析流程。
|
5月前
|
网络协议 安全 Linux
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
|
7月前
|
Web App开发 移动开发 前端开发
React音频播放器样式自定义全解析:从入门到避坑指南
在React中使用HTML5原生<audio>标签时,开发者常面临视觉一致性缺失、样式定制局限和交互体验割裂等问题。通过隐藏原生控件并构建自定义UI层,可以实现完全可控的播放器视觉风格,避免状态不同步等典型问题。结合事件监听、进度条拖拽、浏览器兼容性处理及性能优化技巧,可构建高性能、可维护的音频组件,满足跨平台需求。建议优先使用成熟音频库(如react-player),仅在深度定制需求时采用原生方案。
257 12
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
企业级API集成方案:基于阿里云函数计算调用DeepSeek全解析
DeepSeek R1 是一款先进的大规模深度学习模型,专为自然语言处理等复杂任务设计。它具备高效的架构、强大的泛化能力和优化的参数管理,适用于文本生成、智能问答、代码生成和数据分析等领域。阿里云平台提供了高性能计算资源、合规与数据安全、低延迟覆盖和成本效益等优势,支持用户便捷部署和调用 DeepSeek R1 模型,确保快速响应和稳定服务。通过阿里云百炼模型服务,用户可以轻松体验满血版 DeepSeek R1,并享受免费试用和灵活的API调用方式。
532 12
|
10月前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
8月前
|
负载均衡 网络协议 容灾
【飞天技术沙龙】云解析 DNS 上海站《多云+IDC 融合场景下的 DNS 最佳实践》圆满落幕
【飞天技术沙龙】云解析 DNS 上海站《多云+IDC 融合场景下的 DNS 最佳实践》圆满落幕
161 0
|
11月前
|
域名解析 缓存 网络协议
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
|
12月前
|
监控 网络协议 安全
DNS服务器故障不容小觑,从应急视角谈DNS架构
DNS服务器故障不容小觑,从应急视角谈DNS架构
270 4

热门文章

最新文章

相关产品

  • 函数计算
  • 推荐镜像

    更多
  • DNS