公司在武汉与北京分别有两个源站,但只有openvpn,没法用l2tp组网,怎么办?

虽然公司正在逐步从北京搬到武汉,但公司的内部资源站仍然在北京,并且只提供openvpn。但研发的同学要编译必须要用centos+docker从公司服务器拉取最新资源才能编译。
在武汉本地建一个镜像站虽然可行,但太浪费硬盘资源(况且压根还缺。)
因此可以在武汉本地搭一个透明代理。来将北京资源站“搬到”武汉。

透明代理分为TCP与HTTP透明代理,由于tcp透明代理只能代理单个服务器,因此我在这里使用的是http透明代理,配合北京公司内部的dns,就可以解决武汉研发同学的docker不方便通过openvpn访问北京服务器的问题了。
(为什么不用iptables,因为我不会啊。)

openvpn

准备ubuntu 20.04 desktop版,这个版本连接openvpn简单点。
导入配置文件
先准备好openvpn的配置文件,然后从如图所示的方式导入配置文件,点击连接后输入密码就可以用了。

gost

使用之前编译好的gost文件,这个自己编译的gost文件才支持http+https透明代理

github等开源网站加速脚本及搭建方法-v2.0

随着学习的深入,我不再满足仅仅加速github了,我还要加速nodejs、pip、docker等源站。如果是游戏要...


给了777权限后,放入/usr/bin/目录内:

cp gost /usr/bin/gost

创建启动配置文件:

nano /etc/systemd/system/gost.service

[Unit]
Description=gost
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/bin/gost -L http://:80 -L sni://:443
Restart=on-failure

[Install]
WantedBy=multi-user.target

配置开机启动,然后启动,完事。

systemctl start  gost
systemctl enable  gost 

路由配置

这个坑了我快一天时间,在最开始我原计划用瘦终端内装Ubuntu+vnc来进行访问。
我首先使用ubuntu20.04+gnome+tigervnc+systemctl,想实现半自动(除了输入密码)系统,但折腾了半天,最终确认了tigervnc+gnome不能使用systemctl自动启动,而手动启动没事。这个是gnome桌面的一个bug。
于是我准备用手动启动tigervnc,但当我连接了openvpn后,vnc瞬间断开。我彻底失去了与瘦终端的联系。
因此我最后还是弄了个垃圾服务器装VMware,然后VMware装了个桌面版的Ubuntu虚拟机,这样操作都在Ubuntu里进行。
并且准备了一个USB有线网卡挂载在虚拟机内。(因为我用的是ipmi的交换机,单口dhcp分配一个IP)。然后依然在openvpn连接后,ssh与gost断连。
通过搜索与排查,最后定位到openvpn的路由机制。当openvpn连接后,会往系统内写服务器推送过来的路由,并替换了网关。当gost/ssh接收到请求后,返回的数据包都经由openvpn的路由与网关而丢失,则表现为gost的日志是单向连接。
Tkna.png
最好的办法就是手动绑定路由。
gost的dns解析机制是:当系统内有多个dns服务器时,会指定使用某个的dns服务,因此还要锁定使用dns服务器。

gost配置

修改后的gost配置如下所示:
gost
有以下关键点:
1.针对http网站使用http代理。
2.当网站为ip时,给它一个域名,然后使用hosts文件解析
3.确认好各个网站与之对应的端口号。

openvpn配置

openvpn配置有以下关键点:
openvpn配置
1.手动指定dns为远程服务器的dns。
2.关闭自动路由,手动设定路由。并且勾选仅对该网络上的资源使用此连接。

使用

你可以直接在hosts文件内将北京区的公司域名指向这个ip

172.20.10.35 release.dev.zettakit.com
172.20.10.35 workflow.dev.zettakit.com
172.20.10.35 wiki.dev.zettakit.com
172.20.10.35 gerrit.dev.zettakit.com
172.20.10.35 repo.dev.zettakit.com

也可以在dnsmasq内指向这个ip,然后在武汉的公司使用这个dnsmasq的ip,实现无感访问北京资源站。(当然也仅限http/https)


参考:
Prevent SSH connection lost after logging into VPN on server machine
How can I prevent OpenVPN from clobbering local route?
gost

最后修改:2023 年 06 月 22 日
如果觉得我的文章对你有用,请随意赞赏