作者:朱金灿
来源:clever101的专栏
目前有这样一个场景:ubuntu系统装在一个嵌入式设备上,嵌入式设备只有一个网口,现在你手头有一台装有windows10系统的笔记本电脑,可以通过手机开热点来让笔记本电脑来上网,周围没有可以插入网线的有线网络,也没有路由器或交换机之类的,现在要求你用一根网线将装有ubuntu系统的嵌入式设备和笔记本电脑连接,实现嵌入式设备能够上网,请问如何做?开始我设置笔记本电脑的windows网络共享网络(Internet连接共享),不行,我估计是分享不了给linux系统(或者是需要路由器或者交换机之类的)。通过综合多个AI的答案,我找到了解决办法——笔记本电脑充当嵌入式设备的上网代理服务器。具体做法如下:
一、在windows上安装代理软件
使用第三方代理服务器软件(如CCProxy)。下载并安装CCProxy,下载地址:
CCProxy下载
配置CCProxy,具体是启动CCProxy,进入“设置”或“选项”。在“代理服务”中启用HTTP、HTTPS、FTP等协议。在“账号管理”中添加允许所有机器通过。
二、windows和Linux上的网络配置
首先windows系统的IP和Linux系统的IP上必须设置在同一网段中。其次在Linux系统上将windows机器设置为网关。具体做法如下:
1.设置Linux系统的网关
ip route show | grep default
输出示例:
default via 192.168.123.1 dev eth0 # 已存在其他默认路由
上面的192.168.123.1就是Linux系统的默认网关。
因为192.168.123.1不是windows系统的IP,因此必须先删掉Linux系统的默认网关。具体是执行命令:
# 删除所有默认路由
sudo ip route del default
添加新的路由:
# eth0为网卡名
sudo ip route add default via 192.168.123.100 dev eth0
验证新的路由,运行命令:
ip route show | grep default
三、在Ubuntu上配置代理
可以有两种配置方式:
图形界面设置
具体是进入“设置” -> “网络” -> “网络代理”。
配置代理:选择“手动”,输入Windows机器的IP地址和CCProxy中设置的端口号(默认HTTP为8080,HTTPS为8080,FTP为21)。:
命令行配置
打开终端,编辑/etc/environment文件:
sudo vim /etc/environment
添加以下内容:
# 192.168.123.100为我的win10笔记本电脑的IP
http_proxy="http://192.168.123.100:8080/"
https_proxy="http://192.168.123.100:8080/"
ftp_proxy="http://192.168.123.100:21/"
no_proxy="localhost,127.0.0.1"
保存并退出。
或者使用echo命令添加更为方便,具体是:
sudo bash -c 'cat >> /etc/environment <<EOF
# 192.168.123.100为我的win10笔记本电脑的IP
http_proxy="http://192.168.123.100:8080/"
https_proxy="http://192.168.123.100:8080/"
ftp_proxy="http://192.168.123.100:21/"
no_proxy="localhost,127.0.0.1"
EOF'
然后运行source命令使该文件生效:
source /etc/environment
注意在编辑/etc/environment文件前先备份一下/etc/environment文件,具体是运行命令:
# 1. 备份原文件(防止误操作)
sudo cp /etc/environment /etc/environment.bak
四、测试
在ubuntu上打开浏览器或使用curl命令访问外部网站,确认代理上网是否生效。
五、遇到问题
运行sudo apt update命令出现错误:Certificate verification failed: The certificate is NOT trusted. The certificate chain uses not yet valid certificate. Could not handshake: Error in the certificate verification. [IP: 192.168.123.100 8080]
这个错误信息表明ubuntu机器在通过代理服务器上网时,遇到了证书验证失败的问题。具体来说,证书链中使用了尚未生效的证书。这个问题通常是由于代理服务器使用的证书不被客户端信任或者证书时间设置不正确导致的。
解决办法是输入date命令检查ubuntu系统的系统是否是当前时间,如果不是就修改为当前时间,具体是:
# 假设当前时间为2025-02-10 17:05:00
sudo date -s "2025-02-10 17:05:00"