大秦论书 發表於 2025-8-27 14:17:00

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

<p>现在的情况是:</p>
<ul>
<li>
<p>Windows 宿主机 IP:192.168.1.101</p>
</li>
<li>
<p>VMnet8 虚拟网卡 IP:192.168.1.111</p>
</li>
<li>
<p>CentOS7 上安装了 GitLab,external_url 配置成 http://192.168.1.111:8000</p>
</li>
<li>
<p>你希望在“本地电脑”(应该是同一局域网的另一台电脑)访问 GitLab,但是访问不通。</p>
</li>
</ul>
<p>这类问题一般是 <strong>虚拟机网络模式配置</strong>+ <strong>防火墙</strong> + <strong>GitLab</strong> 监听地址 三方面问题。</p>
<h2 id="1确认虚拟机网络模式">1.确认虚拟机网络模式</h2>
<p>在 VMware Workstation 里有几种网络模式:</p>
<ul>
<li>
<p><strong>NAT</strong>(VMnet8):虚拟机通过宿主机上网,虚拟机 IP 一般是 192.168.1.xxx(和宿主机不同子网)。宿主机能访问虚拟机,但局域网其他电脑无法直接访问虚拟机。</p>
</li>
<li>
<p><strong>桥接</strong>(Bridged):虚拟机和宿主机处于同一网段(比如 192.168.1.xxx),局域网里其他电脑能直接访问虚拟机。</p>
</li>
<li>
<p>仅主机(Host-only, VMnet1):只能宿主机和虚拟机通信,局域网其它电脑无法访问。</p>
</li>
</ul>
<p>👉 如果你要让局域网其它电脑能访问 GitLab,推荐 桥接模式,这样 CentOS 会拿到一个和宿主机类似的 IP(例如 192.168.1.111)。</p>
<h2 id="2查看centos7的ip">2.查看CentOs7的ip</h2>
<p>在 CentOS7 虚拟机里执行:</p>
<pre><code>ip addr
</code></pre>
<p>找到 ens33 或类似网卡的 inet 地址,比如 192.168.1.111。<br>
确认虚拟机是否能 ping 通宿主机(192.168.1.101),以及宿主机能否 ping 通虚拟机。</p>
<p>如果找不到inet 地址说明虚拟网卡配置有问题</p>
<h2 id="3修改-gitlab-external_url">3.修改 GitLab external_url</h2>
<p>如果 CentOS IP 是 192.168.1.111,那 external_url 应该改成:</p>
<pre><code>external_url "http://192.168.1.111:8000"
</code></pre>
<p>然后重新配置 GitLab:</p>
<pre><code>sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
</code></pre>
<h2 id="4检查防火墙和端口">4.检查防火墙和端口</h2>
<p>在 CentOS 上执行:</p>
<pre><code>sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --reload
</code></pre>
<p>确认 GitLab 监听:</p>
<pre><code>sudo ss -lntp | grep 8000
</code></pre>
<p>应该能看到 0.0.0.0:8000,表示对外监听。</p>
<h2 id="5-在宿主机和其它电脑上测试">5. 在宿主机和其它电脑上测试</h2>
<ul>
<li>在宿主机浏览器里访问 http://192.168.1.111:8000。</li>
<li>在同局域网的其他电脑上访问同样地址。</li>
</ul>
<p>如果出现以下的错误:</p>
<pre><code>[rootelocalhost"# ip addr
1: lo: &lt;L00PBACK,UP,LOWER_UP&gt; 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: &lt;BROADCAST,MULTiCAST,UP,LOWER_UP&gt; 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
</code></pre>
<p>你的 ip addr 输出里 ens33 网卡只有 IPv6 地址:</p>
<pre><code>inet6 fe80::20c:29ff:fe03:6348/64 scope link
</code></pre>
<p>❌ 没有 IPv4 地址(比如 192.168.1.xxx),这就是问题所在。<br>
也就是说 虚拟机没有获取到局域网 IP,所以你才会访问不通。</p>
<h2 id="最终解决方式设置一个静态ip地址">最终解决方式:设置一个静态ip地址,</h2>
<p><strong>静态 IP 版本脚本(保存为 /root/fix_gitlab_static.sh)</strong></p>
<pre><code>#!/bin/bash
# 一键修复 GitLab 网络 &amp; 访问问题脚本(静态 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 &gt;/etc/sysconfig/network-scripts/ifcfg-ens33 &lt;&lt;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"
</code></pre>
<p><strong>使用方法:</strong></p>
<p>1.在 CentOS7 里新建脚本:</p>
<pre><code>sudo vi /root/fix_gitlab_static.sh
</code></pre>
<p>2.粘贴上面的内容,保存退出。<br>
3.添加执行权限:</p>
<pre><code>sudo chmod +x /root/fix_gitlab_static.sh
</code></pre>
<p>4.运行脚本</p>
<pre><code>sudo /root/fix_gitlab_static.sh
</code></pre>
<p>这样虚拟机固定用 192.168.1.111,你以后只需要在浏览器访问:<br>
http://192.168.1.111:8000,可以进入gitlab。</p>
<p>如果运行以上的设置静态ip出错了:</p>
<pre><code>Job for network.service failed because the control process exited with error code. See "systemctl
atus network.service" and "journalctl -xe" for details.
</code></pre>
<p>network.service 启动失败。这通常是因为 ifcfg-ens33 配置文件写法有问题。</p>
<p>正确的 静态 IP 配置示例(CentOS7 推荐写法):</p>
<pre><code>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
</code></pre>
<p>注意点:</p>
<ul>
<li>BOOTPROTO=static 在某些 CentOS7 版本会报错,建议用 BOOTPROTO=none。</li>
<li>NETMASK=255.255.255.0 可以写成 PREFIX=24(更推荐)。</li>
</ul>
<h2 id="3-修复步骤">3. 修复步骤</h2>
<p>1.编辑文件:</p>
<pre><code>sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
</code></pre>
<p>改成上面的内容:</p>
<pre><code>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
</code></pre>
<p>2.重启网络:</p>
<pre><code>sudo systemctl start NetworkManager
sudo systemctl restart network
</code></pre>
<p>3.再查 IP:</p>
<pre><code>ip addr show ens33
</code></pre>
<p>应该能看到:</p>
<pre><code>inet 192.168.1.111/24 brd 192.168.1.255 scope global ens33
</code></pre>
<p>4.检查路由和连通性</p>
<pre><code>ip route
ping -c 4 192.168.1.1   # 网关
ping -c 4 192.168.1.100   # 宿主机
ping -c 4 8.8.8.8         # 外网
</code></pre>
<h3 id="容错版脚本保存为-rootfix_gitlab_static_safesh"><strong>容错版脚本(保存为 /root/fix_gitlab_static_safe.sh)</strong></h3>
<p>最终可以使用这个</p>
<pre><code>#!/bin/bash
# 一键修复 GitLab 网络 &amp; 访问问题脚本(静态 IP + 容错版)
# 适用于 CentOS7 + VMware Workstation Pro

set -e

# 固定静态 IP 参数(可修改)
STATIC_IP="192.168.1.111"
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 &gt; $CFG_FILE &lt;&lt;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
</code></pre>
<h3 id="容错版本的使用步骤">容错版本的使用步骤:</h3>
<ol>
<li>
<p>用 vim 或 nano 新建文件:</p>
<p>vim /root/fix_gitlab_static_safe.sh<br>
<img src="https://img2024.cnblogs.com/blog/2212230/202509/2212230-20250922101734455-817531771.png"></p>
</li>
<li>
<p>把上面的容错内容粘贴进去:</p>
<p>保存并退出:<br>
如果是 vim:输入 :wq 回车。<br>
如果是 nano:按 Ctrl+O 保存,Ctrl+X 退出。</p>
</li>
<li>
<p>给脚本加执行权限</p>
<pre><code> chmod +x /root/fix_gitlab_static_safe.sh
</code></pre>
</li>
<li>
<p>执行脚本</p>
<pre><code> bash /root/fix_gitlab_static_safe.sh
</code></pre>
</li>
</ol>
<p>或</p>
<pre><code>        /root/fix_gitlab_static_safe.sh
</code></pre>
<p><strong>如果本文介绍对你有帮助,可以一键四连:点赞+评论+收藏+推荐,谢谢!</strong></p><br><br>
来源:https://www.cnblogs.com/chenshibao/p/19060860
頁: [1]
查看完整版本: 局域网内的电脑访问服务器上的 GitLab不通的解决方式