我们办公室是在海外,需要通过VPN拨回国内总部的办公网络,以访问总部内网
的各种设施。
一般上,这需要通过专门的路由设备直接做点对点的联通,以确保连接速度以及稳定性。
但经过尝试,也可以使用单台Linux服务器作为网关,实现对VPN、DNS智能解析、内外网分流等功能。
办公网络环境
- 使用的是共享办公室的独立网络
- 无公网IP
- 对路由器没有控制
- DHCP也控制不了
- 大部分同事使用wifi上网;少数同事使用网线上线
- 两者属于同一子网:
192.168.117.0/24
- 两者属于同一子网:
实现方式
- 在内网找一台网线连接PC安装Linux
- 为了方便,直接使用的是Ubuntu 18.04 LTS;使用别的系统也行
- Linux上安装openconnect、iptables、dnsmasq
- iptables貌似默认就有了?
sudo apt-get update
sudo /sbin/modprobe tun
sudo apt-get install openconnect
sudo apt-get install iptables
sudo apt-get install dnsmasq
VPN配置
CiscoVPNClient.pngopenconnect
是VPN客户端,可以替代CISCO的AnyConnect拨入总部的VPN网络,命令类似:
openconnect --user=XXXX --passwd-on-stdin vpn.company.TLD < password
VPN拨通后,默认会把成为default gateway,即把本机所有流量都通过VPN走,这明显是不科学的,特别是我们办公室是在海外,拨回总部内网
后,如果全部流量都经过大陆的网络转发,会严重影响速度甚至还有联通性的问题。
正确的做法是只把内网的流量由VPN走,外网访问还继续走现有的网络。
假设VPN拨通后,设备名为:tun0
路由配置
假设总部内网有192.168.0.0/16
跟10.0.0.0/8
两个网段,那么,前者与海外办公室的子网192.168.117.0/24
冲突,幸好海外办公室不需要访问总部内网同一网段下的其它资源,目前只用到192.168.0.0/18
网段下的资源。
路由配置类似如下:
sudo route del default gw 0.0.0.0
sudo route add -net 192.168.0.0/18 dev tun0
sudo route add -net 10.0.0.0/8 dev tun0
DNS配置
总部内网
亦会有内网的DNS服务器(192.168.0.1)对一些内网的域名进行解析,假设域名有 *.center.com
、*.office.com
等。
那么,我们需要配置dnsmasq
对这两个域名做特殊处理,然后其它的域名解析还是使用谷歌的DNS:8.8.8.8
:
echo "server=/center.com/192.168.0.1
server=/office.com/192.168.0.1
server=8.8.8.8" >> /etc/dnsmasq.conf
service dnsmasq restart
网关配置
经过上面的VPN配置
、路由配置
、DNS配置
Linux服务器本身已经可以智能切分内外网的访问,剩下的是需要让它作为网关,把这网络访问共享给办公室内的其它电脑访问:
假设Linux服务器的IP是:192.168.117.88
,网线连接的设备名是enp1s0
首先需要启用ipv4 forward
echo 1 > /proc/sys/net/ipv4/ip_forward
然后是两个网络设备(VPN的tun0
跟网线的enp1s0
)之间的NAT转发:
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -A FORWARD -i enp1s0 -o tun0 -j ACCEPT
sudo iptables -A FORWARD -o tun0 -j ACCEPT
sudo iptables -A FORWARD -i tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -i tun0 -j ACCEPT
这样子,我们的Linux服务器便可以作为网关,供办公子网内其它电脑做中转。
其它电脑
其它电脑上则需要修改网络连接方式,从默认的DHCP,换成手动配置,类似:
IP: 192.168.117.2
Subnet mask: 255.255.255.0
Gateway: 192.168.117.88
DNS: 192.168.117.88
这样便可透明的使用192.168.117.88
这台Linux服务器上的DNS、以及路由转发。
当然,需要手动修改每台电脑仅仅只是因为我们对办公网络的路由、DHCP服务器没有控制,不然可以自己配置DHCP服务器,将IP、网关、DNS的配置自动化掉。
网友评论