配置子网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/sh ifconfig tun0 | grep inet|awk END{print $2}>hosts ftp -i -in <ftp.x

  ftp.x 里包含FTP命令:

open <FTP服务器> user 用户名 密码 bin mput hosts bye

  还可以这样:

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 admin set user fool bar1 set web self 0.0.0.0 5006 set web open default: load vpn_lan2lan load pptp_server pptp_server: set ippool add pool1 10.10.10.160 10.10.10.169 create bundle template B set iface enable proxy-arp set iface idle 1800 set iface enable tcpmssfix set ipcp yes vjcomp set ipcp ranges 10.10.10.101 ippool pool1 set bundle enable compression set ccp yes mppc set mppc yes e40 set mppc yes e128 set mppc yes stateless create link template L pptp set link action bundle B set link enable multilink set link yes acfcomp protocomp set link no pap chap eap set link enable chap set link keep-alive 10 60 set link mtu 1460 set pptp self 0.0.0.0 set link enable incoming vpn_lan2lan: create bundle static b_router set iface route 172.15.0.19/24 set bundle enable compression set bundle enable crypt-reqd set ccp yes mppc set mppc accept compress set mppc yes e40 e56 e128 set mppc yes stateless create link static l_router pptp set link action bundle b_router set link accept chap set auth authname "router" set auth password "password" set link keep-alive 10 60 set link max-redial 0 set link disable incoming set pptp peer 59.75.*.* open vpn_common: set bundle enable compression set ccp yes mppc set mppc yes e128 set bundle enable crypt-reqd set mppc yes stateless pptp_links: set ippool add pool_pptp 192.168.2.101 192.168.2.250 create bundle template b_pptp set iface enable proxy-arp set iface idle 3600 set iface enable tcpmssfix set ipcp enable vjcomp set ipcp ranges 10.0.2.1/32 ippool pool_pptp load vpn_common create link template l_pptp pptp set link action bundle b_pptp load links_common links_common: set link enable multilink set link enable acfcomp protocomp set link disable pap chap eap set link enable chap set link keep-alive 10 60 set link mtu 1396 set link mru 1396 set link enable incoming

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

# server startup: set user rootabcabc admin set user fool bar1 set web self 0.0.0.0 5006 set web open default: load vpn_server load pptp_links load pptp_server pptp_server: set ippool add pool1 172.15.0.1 172.15.0.5 create bundle template B set iface enable proxy-arp set iface idle 1800 set iface enable tcpmssfix set ipcp yes vjcomp set ipcp ranges 172.15.0.10 ippool pool1 set bundle enable compression set ccp yes mppc set mppc yes e40 set mppc yes e128 set mppc yes stateless create link template L pptp set link action bundle B set link enable multilink set link yes acfcomp protocomp set link no pap chap eap set link enable chap set link keep-alive 10 60 set link mtu 1460 set pptp self 0.0.0.0 set link enable incoming vpn_server: create bundle static b_server set ipcp ranges 172.15.0.19/32 10.10.10.99/32 set iface route 10.10.10.0/24 load vpn_common vpn_common: set bundle enable compression set ccp yes mppc set mppc yes e128 set bundle enable crypt-reqd set mppc yes stateless pptp_links: set ippool add pool_pptp 172.15.0.1 172.15.0.10 create bundle template b_pptp set bundle enable compression set bundle enable crypt-reqd set iface enable proxy-arp set iface idle 3600 set iface enable tcpmssfix set ipcp enable vjcomp set ipcp ranges 172.15.0.10/32 ippool pool_pptp load vpn_common create link template l_pptp pptp set link action bundle b_server router set link action bundle b_pptp load links_common links_common: set link enable multilink set link enable acfcomp protocomp set link disable pap chap eap set link enable chap set link keep-alive 10 60 set link mtu 1396 set link mru 1396 set link enable incoming

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

router "password"

两边启动 mpd5:

# service mpd5 start

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

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

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