它是什么:Linux网络班到底学什么
把它想成“把一台 Linux 电脑安全接上网,并让网站能访问”。网卡是网线口,IP 是门牌,路由是导航,端口是服务窗口,DNS 是域名通讯录,防火墙是门卫。对应 GCP:VPC 是私有小区,子网是楼栋,VM 是电脑,防火墙规则是门卫名单,SSH 是远程钥匙。
主线就是 GCP VM、VPC、子网、防火墙规则和 SSH 登录。用控制台 Cloud Shell,从上往下复制:自定义 VPC 默认不放行入站,所以先开 22 给 SSH、80 给网站,再给 VM 打同一标签。这样不通时,能分清服务、端口、云平台哪层出错。
PROJECT=$(gcloud config get-value project)
echo "当前项目:$PROJECT"
gcloud services enable compute.googleapis.com --project="$PROJECT"
gcloud compute networks create net-demo --subnet-mode=custom --project="$PROJECT"
gcloud compute networks subnets create sub-demo --network=net-demo --region=us-central1 --range=10.0.1.0/24 --project="$PROJECT"
gcloud compute firewall-rules create allow-web-ssh --network=net-demo --allow=tcp:22,tcp:80 --source-ranges=0.0.0.0/0 --target-tags=web-ssh --project="$PROJECT"
gcloud compute instances create web-demo --zone=us-central1-a --machine-type=e2-micro --network=net-demo --subnet=sub-demo --tags=web-ssh --image-family=debian-12 --image-project=debian-cloud --boot-disk-size=10GB --project="$PROJECT"
小白坑:当前项目为空或没开结算会失败;同名资源重复执行会提示已存在;第一次 SSH 可能要等密钥生成;22 对全网开放只适合练习,练完改成自己 IP 加 /32;规则刚建好可等十几秒。
这不是只背命令,而是围绕一次网站上线后,把连通、放行、排障串成完整流程:用 SSH 登录装 nginx,让 80 端口提供页面,先在 VM 内测 localhost。下面输出分别看网卡、IP、路由、端口、DNS、系统防火墙和本机连通。
PROJECT=$(gcloud config get-value project)
gcloud compute ssh web-demo --zone=us-central1-a --project="$PROJECT" --command="sudo apt-get update && sudo apt-get install -y nginx curl && sudo systemctl enable --now nginx"
gcloud compute ssh web-demo --zone=us-central1-a --project="$PROJECT" --command="ip addr; ip route; ss -lntp; getent hosts gcpok.com; sudo iptables -S || true; curl -I localhost"
分两层测,是因为 DNS 只翻译不放行,系统防火墙和 GCP 防火墙也不是一回事;本机通、公网不通,先查云防火墙和公网 IP;本机都不通,先查服务和监听端口。
PROJECT=$(gcloud config get-value project)
EXT_IP=$(gcloud compute instances describe web-demo --zone=us-central1-a --project="$PROJECT" --format='get(networkInterfaces[0].accessConfigs[0].natIP)')
echo "网站地址:http://$EXT_IP"
curl -I "http://$EXT_IP"
排障固定成顺序,不靠猜:
- 看 VM 是否 RUNNING,网卡是否有 IP、默认路由是否存在。
- 看 nginx 是否 active,80 端口是否监听,本机访问是否成功。
- 看 GCP 防火墙是否允许 80、来源范围和标签是否命中。
- 看公网 IP、域名 A 记录和浏览器地址是否一致。
PROJECT=$(gcloud config get-value project)
gcloud compute instances describe web-demo --zone=us-central1-a --project="$PROJECT" --format='get(status)'
gcloud compute firewall-rules describe allow-web-ssh --project="$PROJECT"
gcloud compute ssh web-demo --zone=us-central1-a --project="$PROJECT" --command="systemctl is-active nginx; ss -lntp; curl -I localhost"
解决什么问题:为什么服务器总连不上
在 gcpok.com 的 Linux网络班 里碰到“服务器总连不上”,别先重启。把它想成送快递:流量先过 GCP 的实例、VPC 路由、防火墙,才到 Linux 的网卡、端口和服务。按下面顺序做,别跳步;只改服务器里的 sshd_config 或
怎么上手:从零搭一套 GCP 练习环境
别急着点「创建实例」,先把地区、子网、机型定死,练完顺手删掉,月底才不会被账单吓一跳。下面整段复制到本机终端即可;第一行会自动取你账号里的第一个项目,如果你有多个项目,把它换成自己的项目 ID 就行。固定 asia-east1 是怕每次建在不同区,后面防火墙和路由对不上;e2-micro 是最小配置,学网络压根不吃 CPU。
export PROJECT_ID=$(gcloud projects list --format='value(projectId)' --limit=1)
gcloud config set project "$PROJECT_ID"
gcloud config set compute/region asia-east1
gcloud config set compute/zone asia-east1-b
gcloud compute networks create linux-net --subnet-mode=custom
gcloud compute networks subnets create linux-subnet
--network=linux-net --region=asia-east1 --range=10.10.0.0/24
gcloud compute instances create lab-vm
--zone=asia-east1-b --subnet=linux-subnet
--machine-type=e2-micro --image-family=debian-12
--image-project=debian-cloud --tags=linux-lab
这里特意用 custom 自建子网,而不是默认的 auto 模式:auto 会一口气生成一堆子网,小白很容易看串。自己写 10.10.0.0/24,后面看到 10.10.0.x 就知道「哦,就是这台」。
接着配防火墙,只开 22 和练习用的 8080,来源写你当前的公网 IP。不想敲命令也行,控制台 VPC 网络 → 防火墙 里照填同样的目标标记、tcp:22、tcp:8080 和来源 IP,效果一样。
MY_IP=$(curl -s ifconfig.me)
gcloud compute firewall-rules create linux-net-allow-ssh
--network=linux-net --allow=tcp:22
--source-ranges="$MY_IP/32" --target-tags=linux-lab
gcloud compute firewall-rules create linux-net-allow-test
--network=linux-net --allow=tcp:8080
--source-ranges="$MY_IP/32" --target-tags=linux-lab
最大的坑就是图省事写 0.0.0.0/0 或者 tcp:1-65535,等于把机器裸奔在公网,几分钟就有人来扫。只放行自己 IP,换 Wi-Fi 后连不上别慌,回本机把上面两条 create 改成 update 重跑一遍即可。
连进机器,再起一个最简单的 8080 服务当靶子。装 net-tools 只是顺手,真正看监听用 ss 更准。
gcloud compute ssh lab-vm --zone=asia-east1-b
sudo apt-get update -qq && sudo apt-get install -y -qq net-tools
setsid python3 -m http.server 8080 >/tmp/lab.log 2>&1 &
下面五步都在同一个 VM 窗口里贴,别切回本机终端,这是零基础最容易乱的地方。按顺序走,比一上来就重启靠谱得多。
- 查看 IP:先搞清楚机器到底是谁,别拿控制台缓存的旧地址去连。上排是内网 10.10.0.x,下排是外部 NAT IP;坑是把 127.0.0.1 当外部地址发给别人。
ip -br addr curl -s ifconfig.me; echo - 检查路由:要能看到 default via 10.10.0.1,包才出得去。千万别手痒试 ip route del,删掉默认路由 SSH 当场断给你看。
ip route show - 测试端口:先本地再外部。第一条通、第二条不通,八成不是服务坏了,而是防火墙来源 IP 没更新(换网络就变),先别去改代码。
curl -sS --connect-timeout 3 http://127.0.0.1:8080/ | head -n 3 curl -sS --connect-timeout 3 http://$(curl -s ifconfig.me):8080/ | head -n 3 - 查看监听:必须看到 0.0.0.0:8080 或 *:8080。若只绑在 127.0.0.1,防火墙开得再对,外面也永远连不上。
sudo ss -tulnp | grep -E ':(22|8080)' - 读日志:连不上先看日志再动手,别急着 reboot,一重启线索就被冲掉了,等于白排。
sudo tail -n 20 /tmp/lab.log sudo journalctl -u ssh --no-pager -n 20
练完回本机终端执行清理。最后一个坑:只删 VM 不够,留着子网、防火墙和静态规则照样可能计费或挡住下次实验,整段一起跑最省心。
gcloud compute instances delete lab-vm --zone=asia-east1-b --quiet
gcloud compute firewall-rules delete linux-net-allow-ssh linux-net-allow-test --quiet
gcloud compute networks subnets delete linux-subnet --region=asia-east1 --quiet
gcloud compute networks delete linux-net --quiet
与替代方案对比:别把课程和工具混为一谈
新手最容易把「资料」当「课程」:收藏一堆博客、翻完官方文档、刷了认证题库,真遇到 GCP VM 连不上,还是只会照帖子复制命令。它们各有用,但和 Linux网络班 不是一回事。
对比零散教程:短文只给「跑得通的那几行」,通了就关,换个网段就懵。班里把实验排成顺序,先只读、再改配置,每步都复盘一句「刚才改了啥、不改会怎样」,就是为了减少只会复制命令。第一步永远先敲:
ip -br addr show
为什么?先确认网卡拿到了哪个内网 IP,后面配路由才有参照。坑在 一上来就 sudo 改 /etc/netplan/ 的 yaml,一保存 SSH 就断,想回滚都没门。先把原输出记下来再动手。
对比云厂商文档:GCP 文档讲的是「规则」,比如 VPC 防火墙默认不放行入站 ICMP、优先级怎么算;它不教新手「现在连不上,该从哪步查」。课程练的正是把规则用到真实故障上:
ping -c 3 8.8.8.8
curl -I --connect-timeout 5 https://www.google.com
为什么两条一起跑?ping 走 ICMP、curl 走 TCP 443,分开看才知道是整条网断了,还是只被挡了一种协议。最常见的坑是 ping 不通就以为 VM 挂了,急着去控制台重启;其实 curl 能返回 HTTP 头就说明机器没事,只是没放 ICMP,重启白忙还冲掉日志。
对比纯认证课:概念背得全,但离每天管的那台机器有点远。Linux网络班 更贴 GCP VM 日常运维——看网卡、查端口、追连通性、读日志,上班头一天就用得上。但也说实话:OSI 七层、TCP 握手只讲到「够用」,理论深度得课后补齐,别指望一门实操课全包。
简单说:教程和文档是字典,认证是地图,课程是陪练,专盯你敲对命令、绕开坑。别混为一谈,反而省时间。
最佳实践:上线前后照着做更稳
在 Linux网络班 练习或上线时,默认只开必要端口:Web 放 80/443,SSH 放 22,数据库别对公网开;SSH 来源 IP 收窄到办公室、家里或跳板机的固定出口,别写 0.0.0.0/0。多一个入口,就多一次被扫描、爆破和误改的机会。小白坑:改 22 规则时关掉当前窗口会把自己锁在外面;保留旧窗口,新会话登录成功再删旧规则。每周或上线前在 Cloud Shell 复核:
gcloud config list project
gcloud compute firewall-rules list
--format='table(name,network,direction,priority,sourceRanges,allowed,targetTags)'
命名统一用“项目-环境-对象-用途-序号”,如 lnclass-prod-vm-web-01、lnclass-prod-fw-ssh-office、lnclass-prod-subnet-app、lnclass-prod-log-fw-change。VM、防火墙规则、子网、日志接收器和告警策略都照这个写,交接一眼看懂,回滚按前缀找旧规则,不会删错。别用 test、新建规则2,过两周没人敢动。
每次变更前在 Cloud Shell 执行下面这段:把准备执行的命令粘进文件,规则页截图保存到同目录并写入截图名,用 Ctrl+O 保存、Ctrl+X 退出。预期结果写清“业务端口可访问、无关端口不可访问”,回滚才不靠回忆。
CHANGE_ID="$(date +%Y%m%d-%H%M%S)"
mkdir -p "$HOME/linux-network-class/changes"
gcloud compute firewall-rules list
--format='table(name,network,direction,priority,sourceRanges,allowed,targetTags)' > "$HOME/linux-network-class/changes/${CHANGE_ID}-firewall-before.txt"
cat > "$HOME/linux-network-class/changes/${CHANGE_ID}-plan.txt" <<'EOF'
变更目的:
准备执行的命令:
截图文件名:
预期结果:业务端口可访问;无关端口不可访问;SSH 来源 IP 正确;
回滚方法:按导出的规则文件和旧截图恢复;
EOF
nano "$HOME/linux-network-class/changes/${CHANGE_ID}-plan.txt"
变更后别只看页面,按提示测公网 IP 和端口,同时再列一次规则。能连只说明 TCP 通,HTTP 还要看返回码;连不上就查来源 IP、目标标签、监听端口和路由。坑:只截成功页,不截规则页,回滚时找不到旧来源。
gcloud compute firewall-rules list
--format='table(name,network,direction,priority,sourceRanges,allowed,targetTags)'
read -r -p '请输入要测试的公网 IP:' TEST_IP
read -r -p '请输入业务端口(如 80、443 或 22):' TEST_PORT
timeout 3 bash -c "</dev/tcp/${TEST_IP}/${TEST_PORT}" && echo "${TEST_IP}:${TEST_PORT} 可连接" || echo "${TEST_IP}:${TEST_PORT} 不可连接"
把常见故障固定成检查清单,配合监控告警,给 VM 状态、SSH 登录失败、端口探测、防火墙变更、错误日志突增配置告警,减少凭感觉排障:
- 先看 VM、CPU、网络,别一断网就重启,重启会冲掉现场。
- 再看防火墙来源、优先级、目标标签,以及本机监听和路由。
- 最后看系统日志和近期规则变更;在目标 VM 的 SSH 窗口执行下面命令看日志。
journalctl -u ssh -u sshd --since '30 min ago' --no-pager | tail -n 50
journalctl -p warning --since '30 min ago' --no-pager | tail -n 50
常见问题(FAQ)
没有 Linux 基础能学 Linux网络班吗?
可以,先补文件、权限和命令基础,再按实验逐步理解网络连接。
一定要用 GCP 练习吗?
建议用 GCP VM,能同时练云端网络和 Linux 配置;本机也可先打基础。
学完能处理哪些故障?
能按清单排查 SSH 超时、端口不通、防火墙误配、路由和 DNS 问题。
会不会产生云费用?
会,选最小机型、用完停机或删除,并先设置预算提醒。
和考证相比值得吗?
若目标是上手运维,实战更直接;若求职需证书,可再系统补理论。
不想自己折腾 GCP?我们提供云平台代维护、上云迁移与账单代付服务,一对一技术支持。
