配置子网VPN连接,将两个远程子网连在一起

本文的目标是配置两个局域网之间的 VPN 连接,建立 VPN 连接之后,两个局域网好像在同一个局域网内一样。经过下面的配置之后,双方局域网内的全部设备(包括手机)都可以直接使用远程服务器提供的服务。

下面是我实施本文的配置所使用的网络:

局域网一:我公司的内部局域网,使用 ADSL 拨号上网,动态 IP 地址。

局域网二:腾讯云服务器,固定IP地址。现在只有一台机器,但我们可以从不同的地点使用域名建立 VPN 连接到云服务器,就可以直接进入公司内部网,实现远程办公,不需要知道公司现在的 IP 地址。

操作系统:FreeBSD13.1-Release。

两台机都启用路由功能,在 /etc/rc.conf 中加上一行:

gateway_enable="YES"

下面提供两种方法建立局域网 VPN 连接。

方法一:使用系统自带的命令建立VPN连接

这个可能是最简单的方法,只要知道两边的 IP 地址,能相互连接,两边分别输入四行命令就建立了连接。还可以写成脚本定期执行。

简单设置

因为我公司采用拨号上网,是动态 IP 地址,最久每 48 小时变一次。为方便命令执行,我将公司路由器解释为 myself,在 /etc/hosts 中加上这样一行:

13.14.15.6myself我的动态IP地址。

同时在腾讯云服务器上将这个 IP 地址解释为 corpgw,在 /etc/hosts 中加上这样一行:

13.14.15.6corpgw我的动态IP地址。

公司的路由器定时将 IP 地址发送给腾讯云服务器,服务器将 IP 地址写进文件中。可以通过网页程序或者 FTP 传送IP地址。

我的 FTP 传送脚本 ftpsendip.sh:

!/bin/shifconfig tun0 | grep inet|awkEND{print $2}>hosts
ftp -i -in

ftp.x 里包含FTP命令:

openuser用户名 密码binmputhostsbye

还可以这样:

ln-s /ftp上传的目录/hosts /etc/hosts

(加上 127.0.0.1 的解释可能会更好。)

建立连接

在公司路由器,输入以下命令:

ifconfiggif0createifconfiggif010.10.10.99172.15.0.19ifconfiggif0tunnelmyself159.75.*.*routeadd172.15.0.0172.15.0.19255.255.255.0

其中 10.10.10.99 是公司路由器的内部 IP 地址, 172.15.0.* 是云服务器的内部 IP 地址。* 号隐藏了具体数字。

在腾讯云服务器,输入下面的命令:

ifconfiggif0createifconfiggif0172.15.0.1910.10.10.99ifconfiggif0tunnel172.15.0.19corpgwrouteadd10.10.10.010.10.10.99255.255.255.0

在腾讯云服务器,引用本机 IP 地址时,不能使用公网 IP 地址,要使用分配的内网 IP 地址,登录后用 ifconfig 命令就能看到。

经过这么简单的操作,两边的机器可以 ping 通了。

这种方法可以更简便一点,把上面的 corpgw 和 myself 直接换成 IP 地址就可以了。把前面的命令写成可执行脚本 gif.sh:

ifconfiggif0destroyifconfiggif0createifconfiggif0172.15.0.1910.10.10.99ifconfiggif0tunnel172.15.0.19corpgwrouteadd10.10.10.010.10.10.99255.255.255.0

定期执行这个脚本就能保持连接。

方法二:使用 mpd5 建立 VPN 连接

使用 mpd5 建立连接,让公司的路由器连接腾讯云服务器,这样不必知道我们的动态 IP 地址是什么,不必像上一种连接那样要传送和设置 IP 地址。

首先要安装 mpd5:

pkg install mpd5

公司路由器的配置文件,/usr/local/etc/mpd5/mpd.conf:

公司路由器startup:setuserroot abcabcadminsetuserfool bar1setwebself0.0.0.05006setwebopendefault:loadvpn_lan2lanloadpptp_server
pptp_server:setippooladdpool110.10.10.16010.10.10.169createbundletemplateBsetifaceenableproxy-arpsetiface idle1800setifaceenabletcpmssfixsetipcp yes vjcompsetipcp ranges10.10.10.101ippool pool1setbundleenablecompressionsetccp yes mppcsetmppc yes e40setmppc yes e128setmppc yes statelesscreatelinktemplateL pptpsetlinkactionbundle Bsetlinkenablemultilinksetlinkyes acfcomp protocompsetlinknopap chap eapsetlinkenablechapsetlinkkeep-alive1060setlinkmtu1460setpptpself0.0.0.0setlinkenableincoming

vpn_lan2lan:createbundlestaticb_routersetiface route172.15.0.19/24setbundleenablecompressionsetbundleenablecrypt-reqdsetccp yes mppcsetmppcacceptcompresssetmppc yes e40 e56 e128setmppc yes statelesscreatelinkstaticl_router pptpsetlinkactionbundle b_routersetlinkacceptchapsetauth authname"router"setauthpassword"password"setlinkkeep-alive1060setlinkmax-redial0setlinkdisableincomingsetpptp peer59.75.*.*openvpn_common:setbundleenablecompressionsetccp yes mppcsetmppc yes e128setbundleenablecrypt-reqdsetmppc yes stateless

pptp_links:setippooladdpool_pptp192.168.2.101192.168.2.250createbundletemplateb_pptpsetifaceenableproxy-arpsetiface idle3600setifaceenabletcpmssfixsetipcpenablevjcompsetipcp ranges10.0.2.1/32ippool pool_pptploadvpn_commoncreatelinktemplatel_pptp pptpsetlinkactionbundle b_pptploadlinks_common

links_common:setlinkenablemultilinksetlinkenableacfcomp protocompsetlinkdisablepap chap eapsetlinkenablechapsetlinkkeep-alive1060setlinkmtu1396setlinkmru1396setlinkenableincoming

腾讯云服务器端的配置文件,/usr/local/etc/mpd5/mpd.conf:

serverstartup:setuserroot  abcabcadminsetuserfool bar1setwebself0.0.0.05006setwebopendefault:loadvpn_serverloadpptp_linksloadpptp_server
pptp_server:setippooladdpool1172.15.0.1172.15.0.5createbundletemplateBsetifaceenableproxy-arpsetiface idle1800setifaceenabletcpmssfixsetipcp yes vjcompsetipcp ranges172.15.0.10ippool pool1setbundleenablecompressionsetccp yes mppcsetmppc yes e40setmppc yes e128setmppc yes statelesscreatelinktemplateL pptpsetlinkactionbundle Bsetlinkenablemultilinksetlinkyes acfcomp protocompsetlinknopap chap eapsetlinkenablechapsetlinkkeep-alive1060setlinkmtu1460setpptpself0.0.0.0setlinkenableincoming
  
vpn_server:createbundlestaticb_serversetipcp ranges172.15.0.19/3210.10.10.99/32setiface route10.10.10.0/24loadvpn_common

vpn_common:setbundleenablecompressionsetccp yes mppcsetmppc yes e128setbundleenablecrypt-reqdsetmppc yes stateless

pptp_links:setippooladdpool_pptp172.15.0.1172.15.0.10createbundletemplateb_pptpsetbundleenablecompressionsetbundleenablecrypt-reqdsetifaceenableproxy-arpsetiface idle3600setifaceenabletcpmssfixsetipcpenablevjcompsetipcp ranges172.15.0.10/32ippool pool_pptploadvpn_commoncreatelinktemplatel_pptp pptpsetlinkactionbundle b_server routersetlinkactionbundle b_pptploadlinks_common

links_common:setlinkenablemultilinksetlinkenableacfcomp protocompsetlinkdisablepap chap eapsetlinkenablechapsetlinkkeep-alive1060setlinkmtu1396setlinkmru1396setlinkenableincoming

在云服务器端的/usr/local/etc/mpd5/mpd.secret 文件中加上一行(就是用户名和密码):

router"password"

两边启动 mpd5:

service mpd5 start

到这里,两连接都可以连通了。下面是 mpd5 的截图,http://59.75.*.*:5006。

上面的 mpd5 配置文件同样适用于我前面设置 VPN 服务器的情况。

【本文最初的配置不知道是哪年从哪抄来的,并根据自己的需要和心情作了更改,感谢各位作者。】

event_note 10月 27, 2022

account_box 海归 回国

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注