局域网内的电脑访问服务器上的 GitLab不通的解决方式

现在的情况是:

  • Windows 宿主机 IP:192.168.1.101

  • VMnet8 虚拟网卡 IP:192.168.1.111

  • CentOS7 上安装了 GitLab,external_url 配置成 http://192.168.1.111:8000

  • 你希望在“本地电脑”(应该是同一局域网的另一台电脑)访问 GitLab,但是访问不通。

这类问题一般是 虚拟机网络模式配置+ 防火墙 + GitLab 监听地址 三方面问题。

1.确认虚拟机网络模式

在 VMware Workstation 里有几种网络模式:

  • NAT(VMnet8):虚拟机通过宿主机上网,虚拟机 IP 一般是 192.168.1.xxx(和宿主机不同子网)。宿主机能访问虚拟机,但局域网其他电脑无法直接访问虚拟机。

  • 桥接(Bridged):虚拟机和宿主机处于同一网段(比如 192.168.1.xxx),局域网里其他电脑能直接访问虚拟机。

  • 仅主机(Host-only, VMnet1):只能宿主机和虚拟机通信,局域网其它电脑无法访问。

如果你要让局域网其它电脑能访问 GitLab,推荐 桥接模式,这样 CentOS 会拿到一个和宿主机类似的 IP(例如 192.168.1.111)。

2.查看CentOs7的ip

在 CentOS7 虚拟机里执行:

ip addr

找到 ens33 或类似网卡的 inet 地址,比如 192.168.1.111。
确认虚拟机是否能 ping 通宿主机(192.168.1.101),以及宿主机能否 ping 通虚拟机。

如果找不到inet 地址说明虚拟网卡配置有问题

3.修改 GitLab external_url

如果 CentOS IP 是 192.168.1.111,那 external_url 应该改成:

external_url "http://192.168.1.111:8000"

然后重新配置 GitLab:

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

4.检查防火墙和端口

在 CentOS 上执行:

sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --reload

确认 GitLab 监听:

sudo ss -lntp | grep 8000

应该能看到 0.0.0.0:8000,表示对外监听。

5. 在宿主机和其它电脑上测试

如果出现以下的错误:

[rootelocalhost"# ip addr
1: lo: <L00PBACK,UP,LOWER_UP> mtu 65536 ydist noqueue_ state UNKNOMN group def ault qlen 1888
1ink/100pback 00 :00 :00 :00 :00 :00 brd 00 :00 :00 :00 :00 :00
inet 127.0.0.1/8 scope host lo
valid_lft_forever preferred_ift forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
00 ens33: <BROADCAST,MULTiCAST,UP,LOWER_UP> mtu 1500 qdisc pf ifo_fast state UP group default qlen
1ink/ether 0:0c:29:03:63:48 brd ff :ff :ff :ff :ff :ff
inet6_fe80: :20c:29ff :fe03:6348/64 scope 1ink

你的 ip addr 输出里 ens33 网卡只有 IPv6 地址:

inet6 fe80::20c:29ff:fe03:6348/64 scope link

没有 IPv4 地址(比如 192.168.1.xxx),这就是问题所在。
也就是说 虚拟机没有获取到局域网 IP,所以你才会访问不通。

最终解决方式:设置一个静态ip地址,

静态 IP 版本脚本(保存为 /root/fix_gitlab_static.sh)

#!/bin/bash
# 一键修复 GitLab 网络 & 访问问题脚本(静态 IP 版本)
# 适用于 CentOS7 + VMware Workstation Pro

set -e

# 固定的静态 IP 配置
STATIC_IP="192.168.1.111"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
DNS1="8.8.8.8"

echo "=== Step 1: 修改 ens33 网卡配置 (静态 IP 模式) ==="
cat >/etc/sysconfig/network-scripts/ifcfg-ens33 <<EOF
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=$STATIC_IP
NETMASK=$NETMASK
GATEWAY=$GATEWAY
DNS1=$DNS1
EOF

echo "=== Step 2: 重启网络服务 ==="
systemctl restart network

echo "=== Step 3: 确认新 IP 地址 ==="
ip addr show ens33 | grep "inet "

echo " 当前虚拟机 IP 已设置为: $STATIC_IP"

echo "=== Step 4: 修改 GitLab external_url ==="
sed -i "s|^external_url .*|external_url 'http://$STATIC_IP:8000'|" /etc/gitlab/gitlab.rb

echo "=== Step 5: 重启 GitLab ==="
gitlab-ctl reconfigure
gitlab-ctl restart

echo "=== Step 6: 放通防火墙端口 8000 ==="
firewall-cmd --permanent --add-port=8000/tcp
firewall-cmd --reload

echo "=== Step 7: 确认 GitLab 监听端口 ==="
ss -lntp | grep 8000 || echo " GitLab 未监听 8000 端口,请检查配置"

echo " 已完成!现在可以在浏览器访问: http://$STATIC_IP:8000"

使用方法:

1.在 CentOS7 里新建脚本:

sudo vi /root/fix_gitlab_static.sh

2.粘贴上面的内容,保存退出。
3.添加执行权限:

sudo chmod +x /root/fix_gitlab_static.sh

4.运行脚本

sudo /root/fix_gitlab_static.sh

这样虚拟机固定用 192.168.1.111,你以后只需要在浏览器访问:
http://192.168.1.111:8000,可以进入gitlab。

如果运行以上的设置静态ip出错了:

Job for network.service failed because the control process exited with error code. See "systemctl
atus network.service" and "journalctl -xe" for details.

network.service 启动失败。这通常是因为 ifcfg-ens33 配置文件写法有问题。

正确的 静态 IP 配置示例(CentOS7 推荐写法):

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.111
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8

注意点:

  • BOOTPROTO=static 在某些 CentOS7 版本会报错,建议用 BOOTPROTO=none。
  • NETMASK=255.255.255.0 可以写成 PREFIX=24(更推荐)。

3. 修复步骤

1.编辑文件:

sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33

改成上面的内容。

2.重启网络:

sudo systemctl restart network

3.再查 IP:

ip addr show ens33

应该能看到:

inet 192.168.1.111/24 brd 192.168.1.255 scope global ens33

4.检查路由和连通性

ip route
ping -c 4 192.168.1.1     # 网关
ping -c 4 192.168.1.100   # 宿主机
ping -c 4 8.8.8.8         # 外网

容错版脚本(保存为 /root/fix_gitlab_static_safe.sh)

最终可以使用这个

#!/bin/bash
# 一键修复 GitLab 网络 & 访问问题脚本(静态 IP + 容错版)
# 适用于 CentOS7 + VMware Workstation Pro

set -e

# 固定静态 IP 参数(可修改)
STATIC_IP="192.168.1.110"
PREFIX="24"
GATEWAY="192.168.1.1"
DNS1="8.8.8.8"

CFG_FILE="/etc/sysconfig/network-scripts/ifcfg-ens33"
BACKUP_FILE="${CFG_FILE}.bak.$(date +%F-%H%M%S)"

echo "=== Step 1: 备份原始配置文件 ==="
cp -p $CFG_FILE $BACKUP_FILE
echo "已备份到: $BACKUP_FILE"

echo "=== Step 2: 写入静态 IP 配置 ==="
cat > $CFG_FILE <<EOF
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=$STATIC_IP
PREFIX=$PREFIX
GATEWAY=$GATEWAY
DNS1=$DNS1
EOF

echo "=== Step 3: 重启网络服务 ==="
if systemctl restart network; then
	echo " 网络服务已重启"
else
	echo " 网络服务启动失败,回退到 DHCP 模式"
	mv -f $BACKUP_FILE $CFG_FILE
	systemctl restart network
	exit 1
fi

echo "=== Step 4: 检查新 IP 地址 ==="
NEW_IP=$(ip addr show ens33 | grep "inet " | awk '{print $2}' | cut -d/ -f1)

if [ "$NEW_IP" == "$STATIC_IP" ]; then
	echo " 已成功配置静态 IP: $NEW_IP"
else
	echo " 静态 IP 未生效,当前 IP: $NEW_IP,回退到 DHCP 模式"
	mv -f $BACKUP_FILE $CFG_FILE
	systemctl restart network
	exit 1
fi

echo "=== Step 5: 修改 GitLab external_url ==="
sed -i "s|^external_url .*|external_url 'http://$STATIC_IP:8000'|" /etc/gitlab/gitlab.rb

echo "=== Step 6: 重启 GitLab ==="
gitlab-ctl reconfigure
gitlab-ctl restart

echo "=== Step 7: 放通防火墙端口 8000 ==="
firewall-cmd --permanent --add-port=8000/tcp
firewall-cmd --reload

echo "=== Step 8: 确认 GitLab 监听端口 ==="
if ss -lntp | grep -q ":8000"; then
	echo " GitLab 正在监听 8000 端口"
	echo " 现在可以在浏览器访问: http://$STATIC_IP:8000"
else
	echo " GitLab 未监听 8000 端口,请检查 /etc/gitlab/gitlab.rb"
fi

如果本文介绍对你有帮助,可以一键四连:点赞+评论+收藏+推荐,谢谢!