字数 4465,阅读大约需 23 分钟

7. 应用层 (HTTP, FTP, SSH, DNS)
6. 表示层 (加密、压缩)
5. 会话层 (建立、管理会话)
4. 传输层 (TCP, UDP)
3. 网络层 (IP, 路由)
2. 数据链路层 (以太网、MAC)
1. 物理层 (网线、光纤)4. 应用层 (HTTP, FTP, SSH)
3. 传输层 (TCP, UDP)
2. 网络层 (IP, ICMP)
1. 网络接口层 (以太网、Wi-Fi)# 查看网络接口
ip addr
ip a
# 查看特定接口
ip addr show eth0
# 添加 IP 地址
sudo ip addr add 192.168.1.100/24 dev eth0
# 删除 IP 地址
sudo ip addr del 192.168.1.100/24 dev eth0
# 启用接口
sudo ip link set eth0 up
# 禁用接口
sudo ip link set eth0 down
# 修改 MAC 地址
sudo ip link set dev eth0 address 00:11:22:33:44:55
# 查看路由表
ip route
# 添加默认网关
sudo ip route add default via 192.168.1.1
# 添加静态路由
sudo ip route add 10.0.0.0/8 via 192.168.1.254
# 删除路由
sudo ip route del 10.0.0.0/8
# 查看邻居(ARP 表)
ip neigh
# 清除 ARP 缓存
sudo ip neigh flush all# 查看所有接口
ifconfig -a
# 查看特定接口
ifconfig eth0
# 配置 IP 地址
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
# 启用/禁用接口
sudo ifconfig eth0 up
sudo ifconfig eth0 down
# 修改 MAC 地址
sudo ifconfig eth0 hw ether 00:11:22:33:44:55# 查看连接
nmcli connection show
# 查看设备
nmcli device status
# 创建连接
sudo nmcli connection add type ethernet con-name my-eth ifname eth0 \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8 8.8.4.4" \
ipv4.method manual
# 修改连接
sudo nmcli connection modify my-eth ipv4.addresses 192.168.1.200/24
# 启用连接
sudo nmcli connection up my-eth
# 删除连接
sudo nmcli connection delete my-eth
# 查看 WiFi
nmcli device wifi list
# 连接 WiFi
sudo nmcli device wifi connect "SSID" password "PASSWORD"# 静态 IP
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
# DHCP
auto eth0
iface eth0 inet dhcp
# 应用配置
sudo systemctl restart networking
# 或
sudo ifdown eth0 && sudo ifup eth0# 静态 IP
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
# DHCP
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=eth0
DEVICE=eth0
ONBOOT=yes
# 应用配置
sudo systemctl restart network
# 或
sudo ifdown eth0 && sudo ifup eth0# /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
# 应用配置
sudo netplan apply
# 测试配置
sudo netplan tryA 类:1.0.0.0 - 126.255.255.255 (默认掩码 255.0.0.0 或 /8)
B 类:128.0.0.0 - 191.255.255.255 (默认掩码 255.255.0.0 或 /16)
C 类:192.0.0.0 - 223.255.255.255 (默认掩码 255.255.255.0 或 /24)
私有地址:
10.0.0.0/8 → 10.0.0.0 - 10.255.255.255
172.16.0.0/12 → 172.16.0.0 - 172.31.255.255
192.168.0.0/16 → 192.168.0.0 - 192.168.255.255
127.0.0.0/8 → 本地回环/24 = 255.255.255.0 = 256 个 IP (254 个可用)
/25 = 255.255.255.128 = 128 个 IP (126 个可用)
/26 = 255.255.255.192 = 64 个 IP (62 个可用)
/27 = 255.255.255.224 = 32 个 IP (30 个可用)
/28 = 255.255.255.240 = 16 个 IP (14 个可用)
/29 = 255.255.255.248 = 8 个 IP (6 个可用)
/30 = 255.255.255.252 = 4 个 IP (2 个可用)# 查看路由表
ip route
route -n
netstat -rn
# 添加默认网关
sudo ip route add default via 192.168.1.1
sudo route add default gw 192.168.1.1
# 添加静态路由
sudo ip route add 10.0.0.0/8 via 192.168.1.254
sudo route add -net 10.0.0.0/8 gw 192.168.1.254
# 添加主机路由
sudo ip route add 192.168.2.100 via 192.168.1.254
# 删除路由
sudo ip route del 10.0.0.0/8
# 测试路由
traceroute 8.8.8.8
tracepath 8.8.8.8
mtr 8.8.8.8# 启用 IP 转发
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
# 永久生效
sudo tee -a /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 1
EOF
sudo sysctl -p
# 配置 NAT(iptables)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
# 保存规则(CentOS)
sudo service iptables save
# 保存规则(Ubuntu)
sudo iptables-save > /etc/iptables/rules.v4# /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
search example.com
# 注意:NetworkManager 可能会覆盖此文件# Debian/Ubuntu
sudo chattr +i /etc/resolv.conf
# 或配置 NetworkManager
sudo tee /etc/NetworkManager/NetworkManager.conf << EOF
[main]
dns=none
EOF
sudo systemctl restart NetworkManager
# 或使用 systemd-resolved
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved# 查询 DNS
nslookup google.com
dig google.com
# 指定 DNS 服务器
dig @8.8.8.8 google.com
# 查询 MX 记录
dig mx google.com
# 查询 NS 记录
dig ns google.com
# 反向查询
dig -x 8.8.8.8
# 快速测试
host google.com# 查看 systemd-resolved 缓存
systemd-resolve --statistics
# 清除 DNS 缓存
sudo systemd-resolve --flush-caches
# 或
sudo resolvectl flush-caches
# 使用 dnsmasq
sudo apt install dnsmasq
sudo systemctl enable dnsmasq
sudo systemctl start dnsmasq# 查看状态
sudo systemctl status firewalld
# 启动/停止
sudo systemctl start firewalld
sudo systemctl stop firewalld
sudo systemctl enable firewalld
# 查看区域
firewall-cmd --get-zones
firewall-cmd --get-default-zone
# 查看开放端口
firewall-cmd --list-ports
firewall-cmd --list-services
# 开放端口
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
# 开放服务
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
# 删除端口
sudo firewall-cmd --permanent --remove-port=80/tcp
sudo firewall-cmd --reload
# 富规则(IP 白名单)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
sudo firewall-cmd --reload
# 查看规则
sudo firewall-cmd --list-all
sudo firewall-cmd --list-all-zones# 查看规则
sudo iptables -L -n -v
# 查看 NAT 规则
sudo iptables -t nat -L -n -v
# 默认策略
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# 允许回环
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许 SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许 HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许特定 IP
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
# 阻止特定 IP
sudo iptables -A INPUT -s 10.0.0.100 -j DROP
# 防止 DDoS(限制连接速率)
sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
# 删除规则
sudo iptables -D INPUT 1
# 清空规则
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t mangle -F
# 保存规则
sudo iptables-save > /etc/iptables/rules.v4
# 恢复规则
sudo iptables-restore < /etc/iptables/rules.v4# 查看状态
sudo ufw status
sudo ufw status verbose
# 启用/禁用
sudo ufw enable
sudo ufw disable
# 默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 允许端口
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 允许服务
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
# 允许 IP 范围
sudo ufw allow from 192.168.1.0/24
# 允许特定 IP 访问特定端口
sudo ufw allow from 192.168.1.100 to any port 22
# 删除规则
sudo ufw delete allow 80/tcp
# 重置
sudo ufw reset
# 查看日志
sudo ufw logging on
sudo tail -f /var/log/ufw.log# 基本 ping
ping google.com
# 指定次数
ping -c 4 google.com
# 指定间隔
ping -i 2 google.com
# 指定包大小
ping -s 1000 google.com
# 快速 ping
ping -f google.com
# 带时间戳
ping -D google.com# 基本跟踪
traceroute google.com
# 使用 ICMP
traceroute -I google.com
# 使用 TCP
traceroute -T google.com
# 指定端口
traceroute -T -p 443 google.com
# 替代工具
tracepath google.com
mtr google.com # 结合 ping 和 traceroute# 查看所有连接
netstat -an
ss -an
# 查看监听端口
netstat -tulpn
ss -tulpn
# 查看 TCP 连接
netstat -at
ss -t
# 查看 UDP 连接
netstat -au
ss -u
# 查看统计信息
netstat -s
ss -s
# 查看进程
netstat -tulpn
ss -tulpn
# 持续监控
watch -n 1 'ss -t'# 抓取所有流量
sudo tcpdump -i any
# 抓取特定接口
sudo tcpdump -i eth0
# 抓取指定数量
sudo tcpdump -i eth0 -c 100
# 保存为文件
sudo tcpdump -i eth0 -w capture.pcap
# 读取文件
tcpdump -r capture.pcap
# 过滤端口
sudo tcpdump -i eth0 port 80
sudo tcpdump -i eth0 port 22
# 过滤 IP
sudo tcpdump -i eth0 host 192.168.1.100
sudo tcpdump -i eth0 src 192.168.1.100
sudo tcpdump -i eth0 dst 192.168.1.100
# 过滤协议
sudo tcpdump -i eth0 tcp
sudo tcpdump -i eth0 udp
sudo tcpdump -i eth0 icmp
# 详细输出
sudo tcpdump -i eth0 -vv
sudo tcpdump -i eth0 -vvv
# 十六进制输出
sudo tcpdump -i eth0 -xx# 基本请求
curl https://example.com
# 显示响应头
curl -I https://example.com
# 显示详细过程
curl -v https://example.com
# 下载文件
curl -O https://example.com/file.zip
curl -o myfile.zip https://example.com/file.zip
# 发送 POST
curl -X POST -d "key=value" https://example.com
# 发送 JSON
curl -X POST -H "Content-Type: application/json" \
-d '{"key":"value"}' https://example.com
# 认证
curl -u username:password https://example.com
# 忽略证书错误
curl -k https://example.com
# 限速
curl --limit-rate 100k https://example.com/file.zip
# 重试
curl --retry 3 https://example.com# 下载文件
wget https://example.com/file.zip
# 指定输出文件名
wget -O myfile.zip https://example.com/file.zip
# 断点续传
wget -c https://example.com/file.zip
# 后台下载
wget -b https://example.com/file.zip
# 递归下载
wget -r https://example.com/dir/
# 限制速率
wget --limit-rate=100k https://example.com/file.zip
# 指定 User-Agent
wget --user-agent="Mozilla/5.0" https://example.com# 连接 SSH
ssh user@host
# 指定端口
ssh -p 2222 user@host
# 指定密钥
ssh -i ~/.ssh/id_rsa user@host
# 启用 X11 转发
ssh -X user@host
# 端口转发(本地)
ssh -L 8080:localhost:80 user@host
# 端口转发(远程)
ssh -R 8080:localhost:80 user@host
# SOCKS 代理
ssh -D 1080 user@host
# 执行远程命令
ssh user@host "ls -la"
# 复制文件(SCP)
scp file.txt user@host:/path/
scp -r dir/ user@host:/path/
# 复制文件(SFTP)
sftp user@host# /etc/ssh/sshd_config
# 基本配置
Port 22
#Port 2222 # 修改端口
ListenAddress 0.0.0.0
# 认证
PermitRootLogin no # 禁止 root 登录
PasswordAuthentication yes # 密码认证
PubkeyAuthentication yes # 密钥认证
PermitEmptyPasswords no # 禁止空密码
# 安全
Protocol 2 # 只允许 SSHv2
X11Forwarding no # 禁用 X11 转发
MaxAuthTries 3 # 最大认证次数
ClientAliveInterval 300 # 心跳间隔
ClientAliveCountMax 2 # 心跳超时次数
# 用户限制
AllowUsers longge admin # 允许的用户
#DenyUsers root # 禁止的用户
AllowGroups sshusers # 允许的组
# 日志
LogLevel INFO
# 重启服务
sudo systemctl restart sshd# 生成密钥
ssh-keygen -t ed25519
ssh-keygen -t rsa -b 4096
# 复制公钥到服务器
ssh-copy-id user@host
# 手动复制
cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
# 查看密钥指纹
ssh-keygen -lf ~/.ssh/id_rsa.pub
# 生成密钥注释
ssh-keygen -l -f ~/.ssh/id_rsa.pub
# 删除密钥
ssh-keygen -R host
# 测试密钥
ssh -i ~/.ssh/id_rsa user@host# 1. 禁用密码认证,只用密钥
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
# 2. 修改默认端口
Port 2222
# 3. 限制用户
AllowUsers longge
# 4. 使用 Fail2ban
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# 5. 配置 Fail2ban
sudo tee /etc/fail2ban/jail.local << EOF
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
EOF
sudo systemctl restart fail2ban
# 6. 双因素认证(Google Authenticator)
sudo apt install libpam-google-authenticator
google-authenticator
# 编辑 /etc/pam.d/sshd 添加:
# auth required pam_google_authenticator.so# 本地端口转发
# 访问本地 8080 → 远程服务器的 localhost:80
ssh -L 8080:localhost:80 user@remote
# 远程端口转发
# 访问远程服务器的 8080 → 本地的 localhost:80
ssh -R 8080:localhost:80 user@remote
# 动态端口转发(SOCKS 代理)
ssh -D 1080 user@remote
# 浏览器配置 SOCKS 代理 localhost:1080
# 持久化隧道(autossh)
sudo apt install autossh
autossh -M 0 -f -N -L 8080:localhost:80 user@remote# 安装
sudo apt install nginx
sudo yum install nginx
# 基本配置
sudo tee /etc/nginx/sites-available/example << EOF
server {
listen 80;
server_name example.com;
root /var/www/example;
index index.html;
location / {
try_files \$uri \$uri/ =404;
}
location /api/ {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
}
}
EOF
# 启用站点
sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/
# 测试配置
sudo nginx -t
# 重启服务
sudo systemctl restart nginx# 安装
sudo apt install haproxy
# 基本配置
sudo tee /etc/haproxy/haproxy.cfg << EOF
global
log /dev/log local0
maxconn 4096
defaults
log global
mode http
option httplog
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
server web3 192.168.1.12:80 check
EOF
# 重启服务
sudo systemctl restart haproxy# 安装
sudo apt install isc-dhcp-server
# 配置
sudo tee /etc/dhcp/dhcpd.conf << EOF
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8, 8.8.4.4;
option domain-name "example.com";
default-lease-time 600;
max-lease-time 7200;
}
EOF
# 启动服务
sudo systemctl start isc-dhcp-server# 场景:内网 eth0 (192.168.1.x),外网 eth1 (10.0.0.x)
# 1. 配置内网
sudo ip addr add 192.168.1.100/24 dev eth0
sudo ip link set eth0 up
# 2. 配置外网
sudo ip addr add 10.0.0.100/24 dev eth1
sudo ip link set eth1 up
sudo ip route add default via 10.0.0.1 dev eth1
# 3. 添加内网路由
sudo ip route add 192.168.0.0/16 via 192.168.1.1 dev eth0
# 4. 配置 NAT(让内网通过外网上网)
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 5. 持久化配置
# 编辑 /etc/network/interfaces 或使用 netplan# 1. 安装 WireGuard
sudo apt install wireguard
# 2. 生成密钥
cd /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey
# 3. 服务器配置
sudo tee /etc/wireguard/wg0.conf << EOF
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = $(cat privatekey)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# Client 1
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32
[Peer]
# Client 2
PublicKey = CLIENT2_PUBLIC_KEY
AllowedIPs = 10.0.0.3/32
EOF
# 4. 启动服务
sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0
# 5. 客户端配置
[Interface]
Address = 10.0.0.2/24
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 8.8.8.8
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP:51820
AllowedIPs = 0.0.0.0/0
# 6. 查看状态
wg show# 使用 Nginx 作为负载均衡器
sudo tee /etc/nginx/nginx.conf << EOF
user www-data;
worker_processes auto;
events {
worker_connections 1024;
}
http {
upstream backend {
least_conn;
server 192.168.1.10:80 weight=3;
server 192.168.1.11:80 weight=2;
server 192.168.1.12:80 weight=1;
keepalive 32;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_connect_timeout 5s;
proxy_read_timeout 30s;
}
location /health {
access_log off;
return 200 "healthy\n";
}
}
}
EOF
sudo nginx -t
sudo systemctl restart nginx#!/bin/bash
# network-monitor.sh
LOG_FILE="/var/log/network-monitor.log"
ALERT_EMAIL="admin@example.com"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
# 检查外网连通性
check_internet() {
if ! ping -c 3 8.8.8.8 > /dev/null 2>&1; then
log "ERROR: Internet connection lost!"
# 可以添加告警逻辑
return 1
fi
log "OK: Internet connection is fine"
return 0
}
# 检查端口
check_port() {
local host=$1
local port=$2
if ! nc -z -w 3 $host $port > /dev/null 2>&1; then
log "ERROR: $host:$port is not accessible"
return 1
fi
log "OK: $host:$port is accessible"
return 0
}
# 检查带宽
check_bandwidth() {
local iface=${1:-eth0}
local rx_before=$(cat /sys/class/net/$iface/statistics/rx_bytes)
local tx_before=$(cat /sys/class/net/$iface/statistics/tx_bytes)
sleep 1
local rx_after=$(cat /sys/class/net/$iface/statistics/rx_bytes)
local tx_after=$(cat /sys/class/net/$iface/statistics/tx_bytes)
local rx_rate=$(( (rx_after - rx_before) / 1024 ))
local tx_rate=$(( (tx_after - tx_before) / 1024 ))
log "Bandwidth $iface: RX=${rx_rate}KB/s TX=${tx_rate}KB/s"
}
# 检查连接数
check_connections() {
local count=$(ss -t | wc -l)
log "TCP connections: $count"
if [ $count -gt 1000 ]; then
log "WARNING: High number of connections!"
fi
}
# 主循环
main() {
log "=== Network Monitor Started ==="
while true; do
check_internet
check_port localhost 22
check_port localhost 80
check_bandwidth eth0
check_connections
sleep 60
done
}
main#!/bin/bash
# network-troubleshoot.sh
echo "=== Network Troubleshooting Script ==="
echo
# 1. 检查网络接口
echo "1. Network Interfaces:"
ip addr show | grep -E "^[0-9]+:|inet "
echo
# 2. 检查路由
echo "2. Routing Table:"
ip route show
echo
# 3. 检查 DNS
echo "3. DNS Configuration:"
cat /etc/resolv.conf
echo
# 4. 测试网关
echo "4. Testing Gateway:"
GATEWAY=$(ip route | grep default | awk '{print $3}')
if [ -n "$GATEWAY" ]; then
ping -c 3 $GATEWAY
else
echo "No default gateway found!"
fi
echo
# 5. 测试外网
echo "5. Testing Internet:"
ping -c 3 8.8.8.8
echo
# 6. 测试 DNS 解析
echo "6. Testing DNS Resolution:"
nslookup google.com
echo
# 7. 检查防火墙
echo "7. Firewall Status:"
if command -v ufw &> /dev/null; then
sudo ufw status
elif command -v firewall-cmd &> /dev/null; then
sudo firewall-cmd --list-all
elif command -v iptables &> /dev/null; then
sudo iptables -L -n | head -20
fi
echo
# 8. 检查监听端口
echo "8. Listening Ports:"
ss -tulpn | head -20
echo
# 9. 检查网络连接
echo "9. Active Connections:"
ss -t | head -20
echo
echo "=== Troubleshooting Complete ==="# ❌ 错误:远程修改防火墙规则
sudo ufw default deny incoming
# 结果:把自己锁在外面
# ✅ 正确:先允许 SSH
sudo ufw allow 22/tcp
sudo ufw enable
# 或使用定时任务恢复
(crontab -l 2>/dev/null; echo "@reboot /usr/sbin/ufw disable") | crontab -
# 测试成功后删除# ❌ 错误:直接修改 /etc/resolv.conf
# 结果:重启后被 NetworkManager 覆盖
# ✅ 正确:修改 NetworkManager 配置
sudo tee /etc/NetworkManager/NetworkManager.conf << EOF
[main]
dns=none
EOF
sudo systemctl restart NetworkManager
# 然后修改 /etc/resolv.conf# ❌ 错误:重启后 NAT 规则消失
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# ✅ 正确:保存规则
sudo iptables-save > /etc/iptables/rules.v4
# 或配置开机加载
sudo tee /etc/network/if-pre-up.d/iptables << EOF
#!/bin/sh
iptables-restore < /etc/iptables/rules.v4
EOF
sudo chmod +x /etc/network/if-pre-up.d/iptables# ❌ 错误:权限太开放
chmod 777 ~/.ssh/authorized_keys
# 结果:SSH 拒绝使用
# ✅ 正确:设置正确权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub# ❌ 错误:忽略 MTU 设置
# 结果:大包被丢弃,网络慢
# ✅ 正确:检查并设置 MTU
ip link show
# 如果看到需要分片,降低 MTU
sudo ip link set dev eth0 mtu 1400
# 永久设置(/etc/network/interfaces)
mtu 1400# 1
ip addr
ip route
# 2
ping -c 4 8.8.8.8
# 3
ss -tulpn
# 4
nslookup google.com
# 或
dig google.com
# 5
# 见 Netplan 配置章节
# 6
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
# 7
ssh-keygen -t ed25519
ssh-copy-id user@host
# 8
# 见案例 4ip addrifconfig | |
ip routeroute -n | |
ss -tulpnnetstat -tulpn | |
ping host | |
traceroute host | |
dig domainnslookup domain | |
tcpdump -i eth0 | |
curl urlwget url | |
ufwfirewall-cmd / iptables | |
ssh user@host | |
scp file user@host:/path | |
ssh -L 8080:localhost:80 user@host |