还可以写成脚本定期执行。简单设置因为我公司采用拨号上网,是动态IP地址,最久每48小时变一次。为方便命令执行,我将公司路由器解释为myself,在/etc/hosts中加上这样一行:13.14.15.6myself#我的动态IP地址。同时在腾讯云服务器上将这个IP地址解释为corpgw,在/etc/hosts中加上这样一行:13.14.15.6corpgw#我的动态IP地址。可以通过网页程序或者FTP传送IP地址。这种方法可以更简便一点,把上面的corpgw和myself直接换成IP地址就可以了。

本文的目标是配置两个局域网之间的 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|awk 'END{print $2}'>hostsftp -i -in <ftp.x
ftp.x 里包含FTP命令:
open <FTP服务器>user 用户名 密码binmput hostsbye
还可以这样:
ln -s /ftp上传的目录/hosts /etc/hosts
(加上 127.0.0.1 的解释可能会更好。)
建立连接。
在公司路由器,输入以下命令:
# ifconfig gif0 create# ifconfig gif0 10.10.10.99 172.15.0.19# ifconfig gif0 tunnel myself 159.75.*.*# route add 172.15.0.0 172.15.0.19 255.255.255.0
其中 10.10.10.99 是公司路由器的内部 IP 地址, 172.15.0.* 是云服务器的内部 IP 地址。* 号隐藏了具体数字。
在腾讯云服务器,输入下面的命令:
# ifconfig gif0 create# ifconfig gif0 172.15.0.19 10.10.10.99# ifconfig gif0 tunnel 172.15.0.19 corpgw# route add 10.10.10.0 10.10.10.99 255.255.255.0
在腾讯云服务器,引用本机 IP 地址时,不能使用公网 IP 地址,要使用分配的内网 IP 地址,登录后用 ifconfig 命令就能看到。
经过这么简单的操作,两边的机器可以 ping 通了。
这种方法可以更简便一点,把上面的 corpgw 和 myself 直接换成 IP 地址就可以了。把前面的命令写成可执行脚本 gif.sh:
# ifconfig gif0 destroy# ifconfig gif0 create# ifconfig gif0 172.15.0.19 10.10.10.99# ifconfig gif0 tunnel 172.15.0.19 corpgw# route add 10.10.10.0 10.10.10.99 255.255.255.0
定期执行这个脚本就能保持连接。
方法二:使用 mpd5 建立 VPN 连接
使用 mpd5 建立连接,让公司的路由器连接腾讯云服务器,这样不必知道我们的动态 IP 地址是什么,不必像上一种连接那样要传送和设置 IP 地址。
首先要安装 mpd5:
# pkg install mpd5
公司路由器的配置文件,/usr/local/etc/mpd5/mpd.conf:
# 公司路由器startup:set user root abcabc adminset user fool bar1set web self 0.0.0.0 5006set web opendefault:load vpn_lan2lanload pptp_serverpptp_server:set ippool add pool1 10.10.10.160 10.10.10.169create bundle template Bset iface enable proxy-arpset iface idle 1800set iface enable tcpmssfixset ipcp yes vjcompset ipcp ranges 10.10.10.101 ippool pool1set bundle enable compressionset ccp yes mppcset mppc yes e40set mppc yes e128set mppc yes statelesscreate link template L pptpset link action bundle Bset link enable multilinkset link yes acfcomp protocompset link no pap chap eapset link enable chapset link keep-alive 10 60set link mtu 1460set pptp self 0.0.0.0set link enable incomingvpn_lan2lan:create bundle static b_routerset iface route 172.15.0.19/24set bundle enable compressionset bundle enable crypt-reqdset ccp yes mppcset mppc accept compressset mppc yes e40 e56 e128set mppc yes statelesscreate link static l_router pptpset link action bundle b_routerset link accept chapset auth authname "router"set auth password "password"set link keep-alive 10 60set link max-redial 0set link disable incomingset pptp peer 59.75.*.*openvpn_common:set bundle enable compressionset ccp yes mppcset mppc yes e128set bundle enable crypt-reqdset mppc yes statelesspptp_links:set ippool add pool_pptp 192.168.2.101 192.168.2.250create bundle template b_pptpset iface enable proxy-arpset iface idle 3600set iface enable tcpmssfixset ipcp enable vjcompset ipcp ranges 10.0.2.1/32 ippool pool_pptpload vpn_commoncreate link template l_pptp pptpset link action bundle b_pptpload links_commonlinks_common:set link enable multilinkset link enable acfcomp protocompset link disable pap chap eapset link enable chapset link keep-alive 10 60set link mtu 1396set link mru 1396set link enable incoming
腾讯云服务器端的配置文件,/usr/local/etc/mpd5/mpd.conf:
# serverstartup:set user rootabcabc adminset user fool bar1set web self 0.0.0.0 5006set web opendefault:load vpn_serverload pptp_linksload pptp_serverpptp_server:set ippool add pool1 172.15.0.1 172.15.0.5create bundle template Bset iface enable proxy-arpset iface idle 1800set iface enable tcpmssfixset ipcp yes vjcompset ipcp ranges 172.15.0.10 ippool pool1set bundle enable compressionset ccp yes mppcset mppc yes e40set mppc yes e128set mppc yes statelesscreate link template L pptpset link action bundle Bset link enable multilinkset link yes acfcomp protocompset link no pap chap eapset link enable chapset link keep-alive 10 60set link mtu 1460set pptp self 0.0.0.0set link enable incomingvpn_server:create bundle static b_serverset ipcp ranges 172.15.0.19/32 10.10.10.99/32set iface route 10.10.10.0/24load vpn_commonvpn_common:set bundle enable compressionset ccp yes mppcset mppc yes e128set bundle enable crypt-reqdset mppc yes statelesspptp_links:set ippool add pool_pptp 172.15.0.1 172.15.0.10create bundle template b_pptpset bundle enable compressionset bundle enable crypt-reqdset iface enable proxy-arpset iface idle 3600set iface enable tcpmssfixset ipcp enable vjcompset ipcp ranges 172.15.0.10/32 ippool pool_pptpload vpn_commoncreate link template l_pptp pptpset link action bundle b_server routerset link action bundle b_pptpload links_commonlinks_common:set link enable multilinkset link enable acfcomp protocompset link disable pap chap eapset link enable chapset link keep-alive 10 60set link mtu 1396set link mru 1396set link enable incoming
在云服务器端的 /usr/local/etc/mpd5/mpd.secret 文件中加上一行(就是用户名和密码):
router "password"
两边启动 mpd5:
# service mpd5 start
到这里,两连接都可以连通了。下面是 mpd5 的截图,http://59.75.*.*:5006。
上面的 mpd5 配置文件同样适用于我前面设置 VPN 服务器的情况。
【本文最初的配置不知道是哪年从哪抄来的,并根据自己的需要和心情作了更改,感谢各位作者。】
