Azure学生免费套餐申请与B1s虚拟机双栈网络配置实战

📅 2026/8/7 6:16:34
Azure学生免费套餐申请与B1s虚拟机双栈网络配置实战
1. 从零开始Azure学生免费套餐的申请与激活如果你是一名在校学生或者拥有一个有效的教育邮箱那么恭喜你你手上就握有一张通往云计算世界的免费入场券。微软Azure为学生提供的免费套餐不仅包含了12个月的免费额度还永久赠送超过25种热门服务其中最核心的就是一台每月750小时免费时长的虚拟机。这意味着只要你操作得当这台服务器可以24小时不间断运行一整年完全免费。这比市面上许多需要“签到打卡”才能续命的免费主机要稳定和强大得多。很多人听到“云服务器”、“Azure”就觉得门槛很高其实不然。整个申请和配置过程就像注册一个社交账号然后下载一个软件一样简单。关键在于你需要一个能通过验证的“学生身份”。最直接有效的方式就是使用你的学校邮箱通常以.edu.cn或.edu结尾去注册微软的学生开发者计划。如果学校没有提供这类邮箱你也可以尝试用学信网的在线验证报告来证明身份成功率也很高。整个流程的核心是先通过微软的学生认证获得Azure学生订阅的资格然后在这个订阅下创建你的免费虚拟机。这里有一个关键点Azure的免费额度是按“订阅”来管理的。你成功申请到的是一个名为“Azure for Students”的订阅所有免费资源都关联在这个订阅下。所以后续所有的操作请务必确认你是在这个订阅里进行的而不是不小心用到了可能收费的“免费试用”订阅。注意在Azure门户中请时刻留意页面顶部的“订阅”筛选器确保你选择的是“Azure for Students”。这是避免产生意外费用的第一道防线。申请成功后你会进入Azure门户一个功能强大但略显复杂的控制台。别被满屏的英文和术语吓到我们只需要找到创建虚拟机的入口。通常你可以在左侧菜单栏找到“虚拟机”服务或者直接在上方的搜索框输入“Virtual machines”快速定位。点击“创建”按钮你的免费服务器搭建之旅就正式开始了。2. 虚拟机创建详解避开第一个大坑创建虚拟机的过程像是一个填空题但填错选项可能会导致资源超标、无法免费甚至开机失败。我们一步步来确保每一步都走在“免费”的道路上。首先是基础配置。你需要为你的服务器起个名字比如my-free-server。区域的选择至关重要它决定了你的服务器物理位置。对于国内用户优先选择“东亚香港”或“东南亚新加坡”这两个区域到国内的网络延迟相对较低且通常有充足的免费层资源。记住不要选择“美国东部”或“美国西部”虽然它们资源多但免费套餐的特定型号B1s在某些区域可能配额已满导致创建失败。接下来是映像选择也就是服务器的操作系统。Azure免费套餐支持多种Linux发行版和Windows Server。为了最大化利用免费额度我强烈推荐使用Ubuntu Server 20.04 LTS 或 22.04 LTS。原因有三第一Linux系统本身免费不会占用你的免费额度去抵扣Windows的授权费第二社区支持强大遇到问题几乎都能找到解决方案第三对于开发、学习、搭建网站等绝大多数场景Linux是更通用和高效的选择。然后来到最关键的大小选择。点击“查看所有大小”这里必须精确筛选。在筛选条件中找到“VM系列”或类似选项选择“B系列”。然后在SKU列表中找到并选择“B1s”。这就是免费套餐每月赠送750小时的核心机型1核 vCPU1 GiB 内存。它的性能足以运行个人博客、学习用的数据库、跑跑脚本、挂个机器人等轻量级应用。任何选择大于B1s的配置如B1ms 1核2G内存都会立即开始计费。实操心得在大小选择页面直接搜索“B1s”是最快的方式。创建时Azure可能会提示“所选大小在所选区域不可用”。如果遇到别慌退回上一步换个区域比如从“东亚”换到“东南亚”再试一次通常就能解决。身份验证类型这里务必选择“SSH公钥”。这比密码更安全也是管理Linux服务器的标准方式。你需要生成一对密钥私钥留在你的本地电脑上公钥上传到Azure。在Windows上你可以使用 Git Bash 或 WSL 中的ssh-keygen命令在Mac或Linux上直接打开终端运行即可。ssh-keygen -t rsa -b 2048 -C “your_emailexample.com”命令运行后按回车接受默认的保存路径通常是~/.ssh/id_rsa然后设置一个密码短语可为空。完成后你会在~/.ssh/目录下得到两个文件id_rsa私钥绝不可泄露和id_rsa.pub公钥。用文本编辑器打开id_rsa.pub文件将其全部内容复制到Azure创建页面的“SSH公钥”框中。最后在“入站端口规则”部分默认会勾选“SSH (22)”。为了我们后续配置IPv6我建议在这里就提前打开一个额外的端口比如80HTTP和443HTTPS。点击“添加入站端口规则”选择“HTTP”和“HTTPS”Azure会自动填充对应的端口号。这样在创建虚拟机的过程中Azure会同时帮我们配置好网络安全组NSG省去后续单独配置的麻烦。其他设置如磁盘、网络等全部保持默认即可。Azure免费套餐包含的托管磁盘足够使用。确认所有信息无误点击“查看 创建”通过验证后再点击“创建”。等待几分钟你的免费B1s虚拟机就部署完成了。3. 双栈网络配置为你的服务器同时获取IPv4和IPv6地址虚拟机创建成功后默认只分配了一个公共IPv4地址。在IPv4地址日益枯竭的今天能同时拥有IPv4和IPv6双栈无疑能让你的服务器更具灵活性和未来性。Azure是支持IPv6的但需要手动配置这个过程并不复杂却能让你的服务器“身价倍增”。首先你需要理解Azure的网络结构。你的虚拟机VM位于一个虚拟网络VNet和子网Subnet中。网络的安全规则由网络安全组NSG控制。我们要做的就是为这个子网启用IPv6地址空间并为虚拟机添加一个IPv6配置。第一步找到你的虚拟网络。在虚拟机资源页面点击左侧“网络”选项卡或者直接在门户搜索你的虚拟机名进入其概览页面找到“网络接口”并点击其名称。在新页面中你就能看到关联的“虚拟网络/子网”信息。点击这个子网链接进入其配置页面。在子网的设置页面找到“IPv6”部分点击“启用IPv6”。这时你需要为IPv6配置一个地址空间。Azure要求使用唯一的全局单播地址GUA范围。一个简单且不会冲突的方法是使用fd开头的唯一本地地址ULA但为了获得真正的公网IPv6我们通常添加一个Azure支持的IPv6地址范围例如ace:cab:deca::/64这是一个示例实际请使用Azure建议或自己规划的范围。更稳妥的做法是直接点击“添加IPv6地址空间”让Azure自动生成一个范围这能确保它在Azure网络内是唯一的。启用子网IPv6后我们还需要为虚拟机的网络接口NIC添加一个具体的IPv6地址。回到之前虚拟机网络接口的页面在“设置”下找到“IP配置”。你会看到一个主配置通常是ipconfig1只关联了IPv4。点击“添加”创建一个新的IP配置比如命名为ipconfig-ipv6。在“分配”方式中选择“动态”子网选择你刚启用了IPv6的那个然后保存。Azure会自动从子网的IPv6地址池中分配一个地址给这个配置。至此网络层面的配置就完成了。但还有一个关键步骤配置网络安全组NSG规则放行IPv6的流量。虽然我们创建VM时打开了80和443端口但那条规则只针对IPv4。IPv6流量是独立的需要单独的规则。找到关联到你子网或网络接口的NSG进入“入站安全规则”。添加一条新规则源::/0这代表所有IPv6地址相当于IPv4的0.0.0.0/0源端口范围*目标*目标端口范围22, 80, 443根据你需要开放的端口填写协议TCP操作允许优先级 设一个比默认拒绝规则如65000小的数字比如100。名称 例如Allow-IPv6-SSH-WEB同样地如果你需要ICMPv6用于IPv6的ping测试也需要添加一条协议为“ICMP”源为::/0的允许规则。配置完成后回到虚拟机概览页面刷新一下。你应该能在“公共IP地址”旁边看到新分配的一个IPv6地址。恭喜你的服务器现在已经是双栈服务器了。4. 首次连接与基础环境配置拿到服务器的IP地址后我们首先需要通过SSH连接上去。打开你的终端Windows用PowerShell、CMD或Git Bash使用之前生成的私钥进行连接。连接命令格式如下将your_vm_ipv4替换为你的虚拟机公共IPv4地址ssh -i ~/.ssh/id_rsa azureuseryour_vm_ipv4如果是Windows且私钥不在默认位置你需要指定完整路径如ssh -i C:\Users\YourName\.ssh\id_rsa azureuseryour_vm_ipv4。首次连接会提示你确认主机密钥输入yes即可。成功登录后你会看到一个命令行提示符表示你已经进入了你的云端服务器。第一件事永远是更新系统软件包列表并升级现有软件这是一个好习惯。sudo apt update sudo apt upgrade -y接下来我们需要验证IPv6是否配置成功。在服务器内部运行ip a或ifconfig命令。在输出中除了看到eth0网卡上有IPv4地址inet你应该还能看到一个inet6开头的地址后面跟着scope global。这就是你的IPv6全局单播地址。记下这个地址不包含/64或/128这样的后缀。为了测试IPv6网络连通性我们可以尝试从服务器内部ping一个IPv6地址比如Google的公共DNSping6 2001:4860:4860::8888如果能看到回复说明服务器的IPv6出站通信是正常的。现在我们配置服务器允许通过IPv6进行SSH连接。编辑SSH服务配置文件sudo nano /etc/ssh/sshd_config找到#ListenAddress 0.0.0.0这一行可能被注释在它下面添加一行ListenAddress 0.0.0.0 ListenAddress ::这告诉SSH同时监听所有IPv4和IPv6地址。保存并退出在nano中按CtrlX然后按Y再回车。重启SSH服务使配置生效sudo systemctl restart sshd为了后续管理方便我强烈建议安装一个基础的管理工具包比如net-tools包含ifconfig、curl、wget、htop一个强大的进程监控工具等。sudo apt install net-tools curl wget htop -y安装完成后运行htop你可以直观地看到B1s这台1核1G小机器的资源使用情况对于优化应用性能非常有帮助。5. 防火墙配置UFW简明指南Azure的网络安全组NSG是云平台层面的防火墙而Ubuntu系统自带的UFWUncomplicated Firewall是操作系统内部的又一道防线。虽然NSG已经为我们管控了端口但在服务器内部启用UFW可以增加一层安全保护并且管理起来更符合Linux管理员的使用习惯。首先检查UFW的状态默认应该是未激活的。sudo ufw status输出应为Status: inactive。我们的策略是先放行必要的端口再启用防火墙避免把自己关在外面。需要放行的端口包括22/TCP: SSH连接这是我们的生命线必须放行。80/TCP: HTTP流量用于Web服务。443/TCP: HTTPS流量用于加密的Web服务。ICMP: 允许ping方便网络诊断。依次执行以下命令添加规则sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow proto icmp注意UFW的规则默认同时适用于IPv4和IPv6这正是我们需要的。你可以通过sudo ufw status numbered查看带编号的规则列表。在启用之前还有一个非常重要的步骤确保UFW的默认策略不会拒绝所有连接。UFW有默认的入站incoming和出站outgoing策略。我们需要将默认入站策略设置为deny拒绝所有未经允许的入站连接这是安全的而出站策略可以设置为allow允许所有出站连接方便服务器访问外部资源。sudo ufw default deny incoming sudo ufw default allow outgoing现在可以安全地启用UFW了sudo ufw enable系统会提示“命令可能会中断现有的ssh连接”输入y确认。因为我们已经放行了22端口所以当前的SSH连接不会中断。启用后再次检查状态sudo ufw status verbose。你会看到详细的规则列表和默认策略确认我们的配置已生效。踩坑实录UFW与Docker的冲突如果你未来在这台服务器上使用Docker需要特别注意。Docker在运行时会自动修改系统的iptables规则UFW的底层这可能会绕过UFW的规则导致端口意外暴露。一个常见的解决方案是在安装Docker后编辑Docker的配置文件/etc/docker/daemon.json如果不存在则创建添加以下内容{ “iptables”: false }然后重启Docker服务。但这会禁用Docker的容器网络功能需要更复杂的网络配置。对于B1s这样的轻量级应用服务器更简单的建议是如果主要用Docker可以考虑只依赖Azure NSG做防火墙而禁用UFWsudo ufw disable。安全策略需要根据实际应用场景权衡。6. 测试与验证从外部访问你的双栈服务器配置完成后我们必须从外部网络进行测试确保IPv4和IPv6都能正常访问。测试需要从一台同时支持IPv4和IPv6的网络环境进行大多数家庭宽带和移动网络已支持IPv6。首先测试SSH连接。在本地终端尝试用IPv6地址进行SSH连接。命令格式与IPv4类似但需要将IPv6地址用方括号[]括起来ssh -i ~/.ssh/id_rsa azureuser[你的IPv6地址]例如ssh -i ~/.ssh/id_rsa azureuser[ace:cab:deca::1]。如果能够成功登录说明IPv6的SSH入站规则NSG和UFW都已生效。接下来我们可以快速部署一个最简单的Web服务来测试80端口。在服务器上安装一个轻量级的HTTP服务器比如Python自带的python3 -m http.server 80 这条命令会在后台启动一个HTTP服务器监听80端口并将当前目录的文件列表作为网页内容。然后在你的本地浏览器中分别尝试访问http://[你的IPv6地址]http://你的IPv4地址如果两个地址都能打开一个简单的文件列表页面那么恭喜你双栈Web服务也配置成功了。测试完成后记得在服务器上停止这个测试用的HTTP服务器找到它的进程ID并结束sudo lsof -i :80 # 查找占用80端口的进程PID sudo kill PID # 将PID替换为实际的进程号更专业的网络测试可以使用curl命令。在本地终端确保你的本地网络有IPv6运行curl -6 http://[你的IPv6地址] curl -4 http://你的IPv4地址-6和-4参数强制curl使用IPv6或IPv4协议栈。如果两条命令都能返回服务器的响应内容则证明双栈网络配置完美。一个常见问题与排查思路如果IPv6无法访问请按以下顺序排查本地网络是否支持IPv6访问test-ipv6.com或ipv6-test.com网站进行测试。Azure NSG规则确认已添加针对::/0的入站允许规则并且优先级高于可能的拒绝规则。服务器内部防火墙确认UFW规则已正确添加且启用使用sudo ufw status verbose查看。服务监听配置确认Web服务如Nginx/Apache或测试的Python服务器正在运行并且监听在0.0.0.0:80所有IPv4地址和:::80所有IPv6地址。使用sudo netstat -tulpn | grep :80查看监听状态。虚拟机网络接口配置在Azure门户中确认虚拟机的网络接口IP配置里IPv6配置的状态是“已附加”且分配了地址。按照这个链路一步步检查绝大多数IPv6访问问题都能定位。7. 域名与DDNS为动态IP地址绑定一个固定网址Azure免费套餐提供的公共IP地址默认是“动态”的。这意味着当你停止解除分配再启动虚拟机时这个IP地址可能会发生变化。对于需要长期访问的服务比如个人网站一个变化的IP地址是不可接受的。解决这个问题有两个主流方案一是升级为“静态”公共IP但这在免费套餐中可能产生少量费用部分区域免费层不包含静态IP二是使用动态域名解析DDNS这也是最经济灵活的方案。DDNS的原理很简单在你的服务器上运行一个脚本定期检测自己的公共IP地址无论是IPv4还是IPv6一旦发现变化就自动通知域名解析服务商如Cloudflare、阿里云更新对应域名的DNS记录。这样你只需要记住一个固定的域名比如home.yourname.com无论服务器IP怎么变域名总能指向正确的地址。这里以全球流行的Cloudflare为例因为它提供免费的DNS解析服务并且API非常友好。你需要拥有一个域名可以在任何注册商购买并将该域名的DNS服务器修改为Cloudflare提供的地址。首先在服务器上获取必要的工具和脚本。我们需要curl和jq一个处理JSON的命令行工具。sudo apt install curl jq -y接下来准备一个更新脚本。这个脚本需要做以下几件事获取服务器当前的公共IPv4和IPv6地址。调用Cloudflare API更新指定域名的A记录对应IPv4和AAAA记录对应IPv6。创建一个脚本文件例如/usr/local/bin/update-ddns.sh#!/bin/bash # Cloudflare API 参数 ZONE_ID“你的Zone ID” API_TOKEN“你的API令牌” DOMAIN“home.yourdomain.com” # 你要更新的子域名 RECORD_TYPE_A“A” RECORD_TYPE_AAAA“AAAA” # 获取当前公网IP IPV4$(curl -4 -s https://api.ipify.org 2/dev/null || echo “IPv4获取失败”) IPV6$(curl -6 -s https://api6.ipify.org 2/dev/null || echo “IPv6获取失败”) # 获取A记录和AAAA记录的ID RECORD_ID_A$(curl -s -X GET “https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?type$RECORD_TYPE_Aname$DOMAIN” \ -H “Authorization: Bearer $API_TOKEN” \ -H “Content-Type: application/json” | jq -r ‘.result[0].id’) RECORD_ID_AAAA$(curl -s -X GET “https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?type$RECORD_TYPE_AAAAname$DOMAIN” \ -H “Authorization: Bearer $API_TOKEN” \ -H “Content-Type: application/json” | jq -r ‘.result[0].id’) # 更新A记录 (IPv4) if [ “$IPV4” ! “IPv4获取失败” ] [ -n “$RECORD_ID_A” ]; then curl -s -X PUT “https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID_A” \ -H “Authorization: Bearer $API_TOKEN” \ -H “Content-Type: application/json” \ –data “{\”type\”:\”$RECORD_TYPE_A\”,\”name\”:\”$DOMAIN\”,\”content\”:\”$IPV4\”,\”ttl\”:120,\”proxied\”:false}” echo “IPv4记录更新为$IPV4” fi # 更新AAAA记录 (IPv6) if [ “$IPV6” ! “IPv6获取失败” ] [ -n “$RECORD_ID_AAAA” ]; then curl -s -X PUT “https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID_AAAA” \ -H “Authorization: Bearer $API_TOKEN” \ -H “Content-Type: application/json” \ –data “{\”type\”:\”$RECORD_TYPE_AAAA\”,\”name\”:\”$DOMAIN\”,\”content\”:\”$IPV6\”,\”ttl\”:120,\”proxied\”:false}” echo “IPv6记录更新为$IPV6” fi你需要替换脚本中的ZONE_ID、API_TOKEN和DOMAIN。这些信息可以在Cloudflare仪表板中找到。API_TOKEN需要具有编辑DNS记录的权限建议创建一个权限受限的令牌。给脚本添加执行权限sudo chmod x /usr/local/bin/update-ddns.sh手动执行一次脚本测试是否能正常工作sudo /usr/local/bin/update-ddns.sh观察输出如果没有报错并且提示IP更新成功就说明脚本配置正确。最后我们需要让这个脚本定时自动执行。使用Linux系统的cron任务计划。编辑当前用户的crontabcrontab -e如果是第一次编辑可能会让你选择编辑器选择nano即可。在文件末尾添加一行表示每5分钟执行一次DDNS更新脚本*/5 * * * * /usr/local/bin/update-ddns.sh /dev/null 21保存并退出。这样系统就会每5分钟检查一次IP并在变化时自动更新Cloudflare的DNS记录。你可以将频率调整得更低比如每小时0 * * * *但对于免费服务5分钟是一个合理的间隔。现在你就可以通过固定的域名如home.yourdomain.com来访问你的服务器了完全不用担心IP地址的变化。这是将免费动态IP转化为稳定服务的关键一步。8. 成本监控与优化确保真正的“零消费”使用免费套餐最令人担忧的就是“意外扣费”。Azure的免费额度虽然慷慨但一旦超额使用或误用了收费服务就会产生费用。因此建立成本监控习惯至关重要。首先理解免费套餐的组成。Azure for Students 订阅主要包含两部分12个月免费每月200美元信用额度有效期12个月。这部分额度可用于支付大多数收费服务的费用如果用超了或服务不在免费范围内就会开始扣费前提是你绑定了支付方式。12个月后此额度失效。永久免费超过25种服务有永久免费层例如我们使用的B1s虚拟机每月750小时、Blob存储5GB、数据库等。即使12个月后只要你不升级订阅这些永久免费服务仍可继续使用且不会收费。我们的目标是在12个月内只使用永久免费的服务或者将用量严格控制在免费额度内从而不消耗那200美元的月度信用实现真正的零消费。核心监控手段Azure成本管理预算警报在Azure门户顶部的搜索栏直接搜索“成本管理”然后进入“成本管理 计费”页面。设置预算这是最重要的防线。点击“预算”然后“ 添加”。为你的学生订阅创建一个预算。范围选择你的“Azure for Students”订阅。预算名称例如“Monthly-Free-Guard”。重置周期每月。预算金额这里非常关键。我建议设置为 0.01 USD1美分。为什么不是0因为Azure不允许创建金额为0的预算。设置为1美分意味着任何微小的、计划外的费用都会立即触发警报。接下来配置警报条件。添加一个“实际成本”警报当费用超过“预算金额的50%”时也就是超过0.5美分时就发送邮件通知你。再添加一个“预测成本”警报当预测费用会超过预算时也通知你。通知邮箱填写你常用的、会经常查看的邮箱地址。分析成本定期比如每周查看“成本分析”页面。在这里你可以按“服务名称”、“资源组”等维度查看费用明细。确保所有费用都来自你预期的免费服务如“虚拟机”的B1s实例并且金额为0。日常操作中的避坑指南关机不等于免费在Azure中停止Stop虚拟机但未“解除分配”Deallocate计算资源CPU/内存仍会计费正确的免费操作是在门户中点击虚拟机的“停止”按钮后务必确保状态变为“已停止已解除分配”。只有这个状态才不计费计算资源。你仍然需要为关联的磁盘和公共IP支付少量费用但这些在免费套餐的永久免费额度内通常已包含或可忽略。警惕“试用”服务门户中有时会推送“免费试用”服务这些试用期结束后会自动转为付费。在创建任何新服务前务必在Azure定价页面或免费套餐详情页确认其是否属于“永久免费”范畴。资源组管理将所有的免费资源虚拟机、磁盘、IP等创建在同一个资源组下例如命名为“Free-Resources”。这样在成本分析时一目了然也方便未来一次性清理。定期检查养成习惯每月初和月中登录Azure门户快速浏览一下“成本管理”和“订阅”下的“使用情况配额”页面确认没有异常。只要遵循“只用B1s等永久免费服务”、“用完即解除分配”、“设置1美分预算警报”这三条原则你就能安心地享受一整年乃至更久的免费Azure服务器而无需担心账单惊喜。