虚拟机使用主机的VPN 网络配置

548 阅读4分钟

背景:最近在学习k8s,需要从docker官网上下载镜像,国内的镜像找的比较费劲,不如直接配好网络,一劳永逸。具体配置主要分为三个步骤,设置主机上的vpn配置,配置虚拟机的代理网络、配置docker的代理网络。

首先介绍下我的基础配置,我的机器是mac上装的vm虚拟机,centos8,mac安装了VPN,网络配置如下:

image.png 下面进入具体的配置。

一、修改 VPN 的配置

1、查看本机的内网IP地址,输入命令,找到inet后面的地址。

lien@liendeMacBook-Pro  ~:  ifconfig en0

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=6460<TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
	ether c0:89:f3:cf:7c:21
	inet6 fe80::14f:f3f:12da:7f5%en0 prefixlen 64 secured scopeid 0xf
	inet 192.168.1.107 netmask 0xffffff00 broadcast 192.168.1.255
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active

  得到主机的 ip地址为:192.168.1.107

2、找到vpn 监听的端口,有两个,再看配置文件。

lsof -nP -iTCP -sTCP:LISTEN


COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
ControlCe   500 lien    5u  IPv4 0xef599c6a9f1d0653      0t0  TCP *:7000 (LISTEN)
ControlCe   500 lien    6u  IPv6 0xef599c6aa040ba33      0t0  TCP *:7000 (LISTEN)
ControlCe   500 lien    7u  IPv4 0xef599c6a9f1d11b3      0t0  TCP *:5000 (LISTEN)
ControlCe   500 lien    8u  IPv6 0xef599c6aa040ca33      0t0  TCP *:5000 (LISTEN)
rapportd    538 lien    9u  IPv4 0xef599c6a9d75e873      0t0  TCP *:52999 (LISTEN)
rapportd    538 lien   14u  IPv6 0xef599c6aa0403233      0t0  TCP *:52999 (LISTEN)
ApifoxApp   666 lien   10u  IPv4 0xef599c6a9f1d33d3      0t0  TCP 127.0.0.1:42950 (LISTEN)
com.docke 18177 lien  166u  IPv6 0xef599c6aa0408a33      0t0  TCP *:3309 (LISTEN)
clash-dar 19311 lien    7u  IPv4 0xef599c6a9dc88653      0t0  TCP 127.0.0.1:17890 (LISTEN)
clash-dar 19311 lien   11u  IPv4 0xef599c6a991d33d3      0t0  TCP 127.0.0.1:8765 (LISTEN)

3、打开VPN的配置软件,open /Applications/claoud.app/Contents/Resources/clash/config.yaml,可以看到主要有以下的信息。大家各自的地址可能不一样,需要找一下,并进行下面的操作。

mixed-port: 17890
external-controller: 127.0.0.1:8765
allow-lan: false
mode: Global
log-level: info

需要操作👇
# 添加,让代理绑定所有的网络接口,之前仅支持本地的接口
bind-address: 0.0.0.0
# 修改,让局域网中的设备也能访问代理服务
allow-lan: true

4、在主机上测试上面找到的主机内网ip地址和代理的端口是不是正确,如果可以请求通表示可以使用这个地址和端口进行代理配置。

curl -x http://192.168.1.107:17890 https://www.google.com

二、虚拟机代理网络配置

1、在文件末尾添加以下内容(Mac 主机的 IP 是 192.168.1.107,代理端口是 17890):

cat <<EOF >> /etc/profile
export http_proxy=http://192.168.1.107:17890
export https_proxy=http://192.168.1.107:17890
export no_proxy=localhost,127.0.0.1
EOF

# 保存并退出,然后使配置生效
source /etc/profile

2、在虚拟机上测试,能访问通代表设置成功。

curl  https://www.google.com

3、这么设置以后发现,kubectl 命令不好用了,原因是设置了代理,导致 kubectl 的命令被代理了。

export http_proxy=http://192.168.1.107:17890
export https_proxy=http://192.168.1.107:17890
export no_proxy=localhost,127.0.0.1,10.96.0.0/12,192.168.0.0/16,172.16.165.129

4、查看代理环境是否生效。

env | grep -i proxy

以上表示虚拟机目前有访问docker官网的能力了,但是之前在下载的时候,会一直提示io 超时的错误,经过查阅资料,发现使用 docker pull 命令下载镜像的时候,这个命令不会走代理网络,所以需要进一步对 docker的网络进行设置。

三、设置 docker 代理

1、直接执行下面的命令。

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://192.168.1.107:17890"
Environment="HTTPS_PROXY=http://192.168.1.107:17890"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF


sudo systemctl daemon-reload
sudo systemctl restart docker
docker info | grep -i proxy  # 确保代理配置生效

2、成果检验,可以看到可以直接从 docker 官方上拉镜像了,成功!

可能会遇到这种情况,网络原因,需要多 pull 几次就好了。
[root@node1 master]# docker pull registry.k8s.io/ingress-nginx/controller:v1.5.1
Error response from daemon: Head https://us-west2-docker.pkg.dev/v2/k8s-artifacts-prod/images/ingress-nginx/controller/manifests/v1.5.1: EOF



[root@node1 master]# docker pull registry.k8s.io/ingress-nginx/controller:v1.5.1
v1.5.1: Pulling from ingress-nginx/controller
9b18e9b68314: Pull complete
a1b8baad86b5: Downloading [=========================================>         ]  33.63MB/40.49MB
b69a07a133a8: Download complete
c6ee59204c68: Downloading [==========================================>        ]  18.08MB/21.53MB

四、结语

通过以上配置就可以实现虚拟机共用主机上的VPN网络,如果还有什么疑问,大家可以一起探讨。