温馨提示×

golang在centos上的网络配置怎么设置

小樊
36
2025-12-13 12:12:33
栏目: 编程语言

在 CentOS 上配置 Go 的网络环境,通常包含三部分:系统网络与防火墙、Go 模块与程序联网、以及用 Go 编写网络程序时的监听与客户端示例。下面按场景给出可直接执行的步骤与示例。

系统网络与防火墙配置

  • 使用 NetworkManager 配置静态 IP(推荐)
    • 查看连接名:nmcli con show
    • 设置静态地址(将接口名与地址替换为你的实际值):
      • sudo nmcli con mod "ens160" ipv4.addresses 192.168.125.137/24
      • sudo nmcli con mod "ens160" ipv4.gateway 192.168.125.2
      • sudo nmcli con mod "ens160" ipv4.dns "8.8.8.8 8.8.4.4"
      • sudo nmcli con mod "ens160" ipv4.method manual
    • 使配置生效:sudo nmcli con down "ens160" && sudo nmcli con up "ens160"
    • 验证:ip addr show ens160ifconfig ens160(若提示无 ifconfig,安装:sudo dnf install net-tools
  • 使用传统 ifcfg 文件(适用于部分 CentOS 7 场景)
    • 编辑:sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
    • 关键项示例:
      • BOOTPROTO=static
      • ONBOOT=yes
      • IPADDR=192.168.103.203
      • NETMASK=255.255.255.0
      • GATEWAY=192.168.103.1
      • DNS1=8.8.8.8
      • DNS2=8.8.4.4
    • 应用:sudo systemctl restart network
  • 防火墙放行端口(以 firewalld 为例)
    • 放行 HTTP/HTTPS:sudo firewall-cmd --permanent --zone=public --add-service=http && sudo firewall-cmd --permanent --zone=public --add-service=https && sudo firewall-cmd --reload
    • 放行自定义端口(示例:8080/tcp):sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp && sudo firewall-cmd --reload
  • DNS 配置
    • 可在网卡配置中设置 DNS1/DNS2,或在 /etc/resolv.conf 添加:
      • nameserver 8.8.8.8
      • search example.com

Go 模块与程序联网配置

  • 设置 Go 模块代理(国内常用镜像)
    • 临时:export GOPROXY=https://goproxy.cn,direct
    • 永久:将 export GOPROXY=https://goproxy.cn,direct 写入 ~/.bashrc/etc/profile 并执行 source ~/.bashrc
  • 配置 HTTP/HTTPS 代理(如公司内网需要)
    • export HTTP_PROXY=http://proxy.example.com:8080
    • export HTTPS_PROXY=https://proxy.example.com:8080
  • 验证网络连通与模块拉取
    • 拉取测试:go get -u github.com/golang/example/hello
    • 简单联网测试(Go 程序):
      • 代码示例:
        • package main
        • import ("fmt"; "net/http")
        • func main() { resp, err := http.Get("https://www.google.com"); if err != nil { fmt.Println("Error:", err); return }; defer resp.Body.Close(); fmt.Println("Status:", resp.Status) }
      • 运行:go run test_network.go

用 Go 编写网络程序示例

  • TCP 服务器与客户端
    • 服务器(监听 :8080):
      • listener, err := net.Listen("tcp", ":8080")
      • for { conn, err := listener.Accept(); go handle(conn) }
    • 客户端(连接服务器):
      • conn, err := net.Dial("tcp", "127.0.0.1:8080")
  • HTTP 服务
    • 最简示例:
      • http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello")) })
      • http.ListenAndServe(":8080", nil)
  • 运行与验证
    • 启动服务:go run server.go
    • 另开终端测试:curl http://localhost:8080 或使用上面的 TCP 客户端连接 8080 端口

常见问题与排查

  • 端口未放行:服务已启动但访问不通,检查 firewall-cmd --list-ports 与云安全组规则,放行对应端口(如 80/443/8080)。
  • SELinux 限制:网络访问异常时可临时测试 sudo setenforce 0;若恢复,请改为调整 SELinux 策略而非长期关闭(生产不建议关闭)。
  • DNS 解析慢或异常:在网卡配置或 /etc/resolv.conf 中设置可靠 DNS(如 8.8.8.8/1.1.1.1),并验证 /etc/nsswitch.confhosts 顺序。
  • 接口名不一致:使用 ip linknmcli con show 确认实际网卡名(如 ens160/ens33),避免配置到错误接口。

0