类库大魔王
类库大魔王 多年一线C++、Go项目经验,长期从事跨平台(Windows/macOS/iOS/Android)应用架构设计与开发。

在家里无缝访问公司网络


有时候在家里时想访问公司网络,干点活(真是个好员工),主要就是开开内网的网页,连连内网的IM(Cisco Jabber)。本来这个事情只要有一个VPN就可以搞定了,但是!但是我没有权限申请VPN,于是只好另辟蹊径了。

首先,找到一个用于搭建内网隧道的反向代理工具frp,通过它在家里开一个服务端,在公司开客户端,于是家里的机器上就有了一个socks5端口,通过该端口就可访问到公司内网的资源了。于是网络拓扑大体如下图所示:

https://www.umlgen.com/svg/UDfpA2v9B2efpStXvIhEpimhI2nAp5N8ICnBAI_AB2b9pLCeAIfDvULApialJL58piyjICohLAZcvL80Whpyb5I5yioybFpoOeLeY1W8kAJcv3pjt_1qJ_-pERjUB6uDXoWnD80eYKNIdPcRc8oiDTCtCHckgfQN2sPpHdvkAegrHVcb9Qb5o5gT4lE0K24WKo7YwQAPBxQlVpvb8wQ57Y41piYwdlOkUBwlhyB2xEc6_YSxTWCTZAd7CG1PHv2PiO51cP52kAUR9wPQbzIopEHKGnGhm47nVChM5oqJSMamGjRmVCsK5-isF9kp1hyUOnHBTcv-DdS_VWr-A1ecj3pVkFjPPpUoby4X3ejHNLqxQ33pSe7Z2La06lww6WQQkk10HHDo3E3b0eORX0CD50mH8mmHOmmHFrukXzIy560A1G0bkixu

我把服务端放在占美x86小主机上,Banana Pi只负责拨号、路由和X墙

有了隧道,我之前是写了一个pac文件,把公司常用的几个顶级域名全部走代理,浏览器之类能支持pac文件的程序就能工作了,但程序如果不支持pac文件就歇菜了。要实现无缝访问,还需要做几件事。

  • DNS解析。内网资源的域名只有内网的DNS服务能解析,这也可以通过frp解决,在占美x86小主机上开一个非标准端口,比如6001,加上之前说的反向代理,frp客户端侧的配置文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[common]
server_addr = ip.address.at.home
server_port = 7000

[http_proxy_on_windows]
type = tcp
remote_port = 6001
plugin = http_proxy
use_encryption = true
use_compression = true

[socks5_proxy_on_windows]
type = tcp
remote_port = 6002
plugin = socks5
use_encryption = true
use_compression = true

[dns_proxy_on_windows1]
type = udp
remote_port = 6001
local_ip = dns.server.ip1.at.company
local_port = 53

[dns_proxy_on_windows2]
type = udp
remote_port = 6002
local_ip = dns.server.ip2.at.company
local_port = 53
  • 再通过dnsmasq把那几个内网域名指向该非标准端口就可以了,其他默认的不变:
1
2
3
4
5
6
7
server=208.67.222.222#5353
server=/.domain1.com/127.0.0.1#6001
server=/.domain2.com/127.0.0.1#6001
server=/.domain3.com/127.0.0.1#6001
server=/.domain4.com/127.0.0.1#6001
server=/.domain5.com/127.0.0.1#6001
server=/.domain6.com/127.0.0.1#6001
  • 分流。本来已经在Banana Pi强制所有海外IP走代理,现在只要把内网资源的IP分流到占美主机上的socks5端口即可。在Banana Pi上编译一个redsocks,redsocks可以把流量导到socks5端口。再修改一下iptables设置:
1
2
3
4
5
6
7
8
9
10
11
-A SS -d 127.0.0.0/8 -j RETURN
-A SS -d 192.168.0.0/16 -j RETURN
-A SS -d 169.254.0.0/16 -j RETURN
-A SS -d 224.0.0.0/4 -j RETURN
-A SS -d 240.0.0.0/4 -j RETURN
-A SS -p tcp -d 10.0.0.0/8 -j REDIRECT --to-ports 58096
-A SS -p tcp -d 173.36.0.0/14 -j REDIRECT --to-ports 58096
-A SS -p tcp -d 172.0.0.0/8 -j REDIRECT --to-ports 58096
-A SS -p tcp -d 171.70.124.0/14 -j REDIRECT --to-ports 58096
-A SS -p tcp -d 72.163.0.0/16 -j REDIRECT --to-ports 58096
-A SS -p tcp -j REDIRECT --to-ports 58097

其中58096是redsocks开的端口,58097是统一海外代理。

这些步骤之后,所有从R6300v2走的设备都能享受到正确的DNS解析和TCP分流,不需要pac文件,浏览器、IM都能正常访问到内网资源。

感觉本文不错,不妨小额鼓励我一下!
如果你有Visa、MasterCard之类的国际银行卡,也可以考虑以下选项:
comments powered by Disqus