网络配置的初体验

第一次在鸿蒙PC上运行git clone命令时,我遭遇了人生中最漫长的等待——整整两分钟,然后是一个冷冰冰的“连接超时”。那一刻我意识到,在这个全新的系统上,网络配置将是我的第一道坎。经过三天的摸索,我终于总结出一套在鸿蒙PC上配置网络环境的完整方案。今天,我将这些经验毫无保留地分享给你。

代理设置

公司内网需要代理才能访问外部资源,这是每个企业开发者的日常。在鸿蒙PC上,代理设置需要一些技巧。

理解鸿蒙PC的代理机制

鸿蒙PC的代理配置分为三个层面:系统级、用户级和应用级。系统级影响所有用户,用户级只影响当前用户,应用级则针对特定应用。

我建议采用用户级配置,这样既不会影响其他用户,也便于管理。首先创建配置文件:

mkdir -p ~/.config/harmony
nano ~/.config/harmony/proxy.conf

文件内容如下:

# 代理服务器配置
PROXY_SERVER="http://proxy.example.com:8080"
NO_PROXY="localhost,127.0.0.1,::1,192.168.0.0/16,10.0.0.0/8"

# 设置环境变量
export http_proxy="${PROXY_SERVER}"
export https_proxy="${PROXY_SERVER}"
export ftp_proxy="${PROXY_SERVER}"
export all_proxy="${PROXY_SERVER}"
export no_proxy="${NO_PROXY}"

# 使配置在当前shell生效
echo "代理配置已加载"

为了让这个配置在每次打开终端时自动生效,我在.bashrc末尾添加了一行:

# 加载代理配置
[ -f ~/.config/harmony/proxy.conf ] && source ~/.config/harmony/proxy.conf

应用特定的代理配置

有些工具不遵循系统环境变量,需要单独配置。

Git的代理设置:

git config --global http.proxy http://proxy.example.com:8080
git config --global https.proxy http://proxy.example.com:8080

npm的代理设置:

npm config set proxy http://proxy.example.com:8080
npm config set https-proxy http://proxy.example.com:8080

wget的代理设置:

~/.wgetrc中添加:

use_proxy=on
http_proxy=http://proxy.example.com:8080
https_proxy=http://proxy.example.com:8080

防火墙

防火墙是保护系统的第一道防线,但对于开发者来说,过于严格的防火墙会阻碍工作。在鸿蒙PC上,我使用firewalld来管理防火墙规则。

创建开发专用的防火墙区域

与其在默认区域上修修改改,不如创建一个专门用于开发的新区域:

# 创建开发区域
sudo firewall-cmd --permanent --new-zone=development

# 设置默认策略:允许出站,拒绝入站(除特定端口外)
sudo firewall-cmd --permanent --zone=development --set-target=DROP

# 将当前网卡添加到开发区域
interface=$(ip route | grep default | awk '{print $5}' | head -1)
sudo firewall-cmd --permanent --zone=development --change-interface=${interface}

# 允许SSH连接(方便远程管理)
sudo firewall-cmd --permanent --zone=development --add-service=ssh

# 允许本地回环通信
sudo firewall-cmd --permanent --zone=development --add-source=127.0.0.1/32

开放开发常用端口

根据我的开发习惯,我开放了以下端口:

# 开发服务器常用端口
DEV_PORTS=(3000 8080 8000 9000 4200 5000)

for port in ${DEV_PORTS[@]}; do
    sudo firewall-cmd --permanent --zone=development --add-port=${port}/tcp
done

# 数据库端口
sudo firewall-cmd --permanent --zone=development --add-port=3306/tcp  # MySQL
sudo firewall-cmd --permanent --zone=development --add-port=5432/tcp  # PostgreSQL
sudo firewall-cmd --permanent --zone=development --add-port=6379/tcp  # Redis

# 应用新配置
sudo firewall-cmd --reload

验证防火墙配置

配置完成后,一定要验证规则是否正确:

# 查看开发区域的所有规则
sudo firewall-cmd --zone=development --list-all

# 检查特定端口是否开放
sudo firewall-cmd --zone=development --query-port=3000/tcp

# 查看所有活动区域
sudo firewall-cmd --get-active-zones

开发服务器的部署

有了代理和防火墙的基础,现在让我们部署几个实际的开发服务器。

一个极简的Node.js服务器

我创建了一个简单的Node.js服务器,专门用于测试网络环境:

// server-test.js
const http = require('http');
const os = require('os');

const server = http.createServer((req, res) => {
    const info = {
        timestamp: new Date().toISOString(),
        server: 'HarmonyOS PC Development Server',
        hostname: os.hostname(),
        network: Object.keys(os.networkInterfaces()),
        url: req.url,
        method: req.method,
        headers: req.headers
    };
    
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify(info, null, 2));
});

const PORT = 3000;
const HOST = '0.0.0.0';  // 监听所有接口

server.listen(PORT, HOST, () => {
    console.log(`Server running at http://${HOST}:${PORT}`);
    console.log(`Local: http://localhost:${PORT}`);
    console.log(`Network: http://${getLocalIP()}:${PORT}`);
});

function getLocalIP() {
    const interfaces = os.networkInterfaces();
    for (const name of Object.keys(interfaces)) {
        for (const iface of interfaces[name]) {
            if (iface.family === 'IPv4' && !iface.internal) {
                return iface.address;
            }
        }
    }
    return '127.0.0.1';
}

运行这个服务器:

node server-test.js

然后在同一网络下的另一台设备上访问http://<鸿蒙PC的IP>:3000,就能看到服务器的响应信息。

网络测试工具

为了快速诊断网络问题,我写了一个简单的测试脚本:

#!/bin/bash
# network-test.sh

echo "=== 鸿蒙PC网络环境测试 ==="
echo ""

# 测试本地网络
echo "1. 测试本地回环..."
ping -c 2 127.0.0.1

echo ""
echo "2. 测试网关连通性..."
gateway=$(ip route | grep default | awk '{print $3}')
ping -c 2 $gateway

echo ""
echo "3. 测试DNS解析..."
nslookup baidu.com

echo ""
echo "4. 测试HTTP连接..."
curl -s -o /dev/null -w "状态码: %{http_code}\n" http://www.baidu.com

echo ""
echo "5. 检查开放端口..."
sudo firewall-cmd --zone=development --list-ports

echo ""
echo "=== 测试完成 ==="

实用技巧与故障排除

快速切换网络配置

我创建了一个脚本,可以快速在不同的网络环境间切换:

#!/bin/bash
# network-switch.sh

case "$1" in
    "office")
        echo "切换到办公室网络配置..."
        # 办公室特定的代理设置
        ;;
    "home")
        echo "切换到家庭网络配置..."
        # 家庭网络配置
        ;;
    "test")
        echo "切换到测试环境..."
        # 测试环境配置
        ;;
    *)
        echo "用法: network-switch [office|home|test]"
        ;;
esac

常见问题及解决方案

  1. 代理设置后git仍然连不上
    1. 检查git配置:git config --global --get http.proxy
    2. 尝试使用SSH方式代替HTTPS
  1. 防火墙规则不生效
    1. 确保firewalld服务正在运行:sudo systemctl status firewalld
    2. 重新加载规则:sudo firewall-cmd --reload
  1. 本地服务器无法被其他设备访问
    1. 检查服务器是否绑定到0.0.0.0而不是127.0.0.1
    2. 确认防火墙已开放对应端口

网络监控命令

这些命令帮助我实时了解网络状况:

# 查看实时网络连接
sudo ss -tuln

# 监控网络流量
sudo iftop

# 查看路由表
ip route show

结语

在鸿蒙PC上配置网络环境,是一个从陌生到熟悉的过程。一开始可能会遇到各种问题,但只要掌握了正确的方法,就能游刃有余。

关键是要理解每个配置的作用:代理让我们能访问外部资源,防火墙保护我们的系统安全,合理的服务器配置让开发工作更加顺畅。这三者需要平衡,既不能过于宽松导致安全风险,也不能过于严格影响开发效率。

我建议你将配置文档化,记录下每个有效的配置。这样当遇到类似问题时,就能快速找到解决方案。同时,定期检查和更新配置也很重要,特别是当网络环境或开发需求发生变化时。


欢迎加入开源鸿蒙PC社区:https://harmonypc.csdn.net/

期待在社区看到你的分享!

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐