• [技术干货] 使用openvpn实现访问远程网络
    一、概述VPN (Virtual Private Network) 是虚拟私有网,它通过在公网上创建一个专用并且加密的网络通道(隧道)进行通讯,在实际的应用中可以帮助远程用户、公司分支机构、商业伙伴及供应商等之间建立一个安全可信的网络连接.实际上使用VPN的目的及作用就是从网络层面打通两个或多个异地网络,就好像在同一个局域网一样,并且是加密安全的.使用vpn的一些场景:穿墙,看外面的世界本地网络访问公司内网资源,比如在家里或出差的同事要访问到公司内部的网络设备、服务器资源两个或以上的异地网络互通,比如多个IDC机房、多个分支机构之间内网互通以及数据传输VPN软件有很多,有商业的、开源的,openvpn就是其中一个非常好的开源vpn软件,在生产环境中使用也非常稳定及可靠,其主要特点:开源、跨平台、易于使用、稳定与安全性,对于中小型企业来说用openvpn架设vpn服务器是个不错的选择,而不去考虑商业的vpn软件,有一定成本优势。呵呵,做运维就是这样,总是用一些开源的软件搭建一套还不错的系统.二、使用openvpn实现访问远程网络有这样的需求:有些同事不在公司或在外面出差但又要访问公司内网的服务器资源,一般的做法是做端口映射,但是随着端口映射的数量越来越多带来一些问题:管理比较麻烦、不是很安全、配置繁琐。对于这种需求可以使用vpn打通自己(本地)的网络与公司的网络,这样就像是在公司内网访问服务器一样并且是安全的.因此用openvpn来搭建vpn服务器,规划如下:环境说明:目的是让你所在的本地网络能够通过vpn服务器访问公司内网(172.16.0.0/24、172.16.2.0/24、10.10.10.0/24)中的主机用公司内网中的一台(172.16.0.100)作为openvpn服务器,然后在防火墙上做外网端口映射, 发布在外网(因为没有公网地址,只能这样做)公司网络中的172.16.0.0/24、172.16.2.0/24、10.10.10.0/24网段已经是互通的1、部署openvpn服务端(172.16.0.100)openvpn需要tun模块支持,所以先检查是否支持tun模块# ls /dev/net/tun /dev/net/tun                     # 如果有表示支持停掉selinux# setenforce 0setenforce: SELinux is disabled开启路由转发,编辑  /etc/sysctl.conf 文件将 net.ipv4.ip_forward = 0 改为  net.ipv4.ip_forward = 1,然后执行:# sysctl -p安装openvpn及相关包# curl http://mirrors.aliyun.com/repo/epel-6.repo  -o  /etc/yum.repos.d/epel-6.repo --silent   # 添加阿里的EPEL源# yum install openssl openvpn easy-rsa lzo -y openssl包   程序包lzo包       用来进行数据压缩easy-ras包,  提供了一些证书生成脚本、模板配置文件等可以看下装了哪些东西# rpm -ql openvpn# rpm -ql easy-rsa创建相关目录# mkdir /var/log/openvpn                      # 放openvpn相关日志文件# mkdir /etc/openvpn/easy-rsa                 # 放easy-rsa包提供的相关工具# mkdir /etc/openvpn/ccd                      # openvpn客户端的配置目录,后面会用到将easy-ras包提供的工具复制到 /etc/openvpn/easy-rsa# cp /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa/ -r # cd /etc/openvpn/easy-rsa# ls                              // 可以看到就是一堆脚本,主要是用来生成证书build-ca build-key build-key-server clean-all list-crl openssl-1.0.0.cnf sign-req whichopensslcnfbuild-dh build-key-pass build-req inherit-inter openssl-0.9.6.cnf pkitool varsbuild-inter build-key-pkcs12 build-req-pass keys openssl-0.9.8.cnf revoke-full修改 openssl-1.0.0.cnf 文件中 default_crl_days值,调大为3650或者更大,默认是30,单位是天, 3650天也就是表示为10年。这步不做的话如果服务端开启了crl-verify(吊销证书)功能,30天后全部客户端会连不上,因为有效期默认是30天,这个坑其它地方不会告诉你vim  openssl-1.0.0.cnf找到 并改成 default_crl_days = 3650编辑 /etc/openvpn/easy-rsa/vars文件,找到下面的变量修改成你指定的值,后面生成证书的时候会应用这些变量值 (不做这步也可以,它会应用默认的变量值)export KEY_COUNTRY="CN"        # 国家export KEY_PROVINCE="GD"       # 省份export KEY_CITY="GZ"           # 城市export KEY_ORG="MY_ORG"        # 组织/公司export KEY_EMAIL="vpn@qq.com"  # 邮箱export KEY_OU="vpn"            # 单位  export KEY_NAME="openvpn"      # 服务器名称然后执行# source vars      # 这一步会导入vars文件中的变量作为当前的环境变量# ./clean-all      # 清除旧的keys目录下的文件生成CA(证书颁发机构),一直回车即可# ./build-ca               Generating a 2048 bit RSA private key............................................................................+++..................+++writing new private key to 'ca.key'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [CN]:State or Province Name (full name) [GD]:Locality Name (eg, city) [GZ]:Organization Name (eg, company) [MY_ORG]:Organizational Unit Name (eg, section) [vpn]:Common Name (eg, your name or your server's hostname) [openvpn CA]:Name [openvpn]:Email Address [vpn@qq.com]:会在 /etc/openvpn/easy-rsa/keys 目录下生成ca.crt、ca.key两个证书文件# ls /etc/openvpn/easy-rsa/keys/ | grep caca.crt                  ca.key生成服务器证书./build-key-server vpnserver     # 起个名字叫vpnserver,后面会用到 (注:必须是唯一的、尽量是有意义的名称)Generating a 2048 bit RSA private key................................+++.....+++writing new private key to 'vpnserver.key'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [CN]:State or Province Name (full name) [GD]:Locality Name (eg, city) [GZ]:Organization Name (eg, company) [MY_ORG]:Organizational Unit Name (eg, section) [vpn]:Common Name (eg, your name or your server's hostname) [vpnserver]:Name [vpn]:Email Address [vpn@qq.com]:Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:                                 # 这里是设置连接vpn的时候要不要输入账号和密码,如果不设置就直接回车(可选)An optional company name []:Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnfCheck that the request matches the signatureSignature okThe Subject's Distinguished Name is as followscountryName           :PRINTABLE:'CN'stateOrProvinceName   :PRINTABLE:'GD'localityName          :PRINTABLE:'GZ'organizationName      :PRINTABLE:'MY_ORG'organizationalUnitName:PRINTABLE:'vpn'commonName            :PRINTABLE:'vpnserver'name                  :PRINTABLE:'vpn'emailAddress          :IA5STRING:'vpn@qq.com'Certificate is to be certified until Apr 29 06:26:49 2026 GMT (3650 days)Sign the certificate? [y/n]:y         # 输入y1 out of 1 certificate requests certified, commit? [y/n]y   # 输入yWrite out database with 1 new entriesData Base Updated它会在 /etc/openvpn/easy-ras/keys 目录下生成三个证书文件# ls /etc/openvpn/easy-rsa/keys/ | grep vpnservervpnserver.crtvpnserver.csrvpnserver.key生成客户端证书,客户端会用证书来连接服务端./build-key vpnclient      --- 表示为vpnclient这个客户端生成证书,后面会用到 (注:必须是唯一的、尽量是有意义的名称)Generating a 2048 bit RSA private key.......+++....................+++writing new private key to 'vpnclient.key'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [CN]:State or Province Name (full name) [GD]:Locality Name (eg, city) [GZ]:Organization Name (eg, company) [MY_ORG]:Organizational Unit Name (eg, section) [vpn]:Common Name (eg, your name or your server's hostname) [vpnclient]:Name [vpn]:Email Address [vpn@qq.com]:Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:An optional company name []:Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnfCheck that the request matches the signatureSignature okThe Subject's Distinguished Name is as followscountryName           :PRINTABLE:'CN'stateOrProvinceName   :PRINTABLE:'GD'localityName          :PRINTABLE:'GZ'organizationName      :PRINTABLE:'MY_ORG'organizationalUnitName:PRINTABLE:'vpn'commonName            :PRINTABLE:'vpnclient'name                  :PRINTABLE:'vpn'emailAddress          :IA5STRING:'vpn@qq.com'Certificate is to be certified until Apr 29 06:30:42 2026 GMT (3650 days)Sign the certificate? [y/n]:y    --- 输入y1 out of 1 certificate requests certified, commit? [y/n]y   --- 输入yWrite out database with 1 new entriesData Base Updated它会在 /etc/openvpn/easy-ras/keys 目录下生成三个证书文件# ls /etc/openvpn/easy-rsa/keys/ | grep vpnclientvpnclient.crtvpnclient.csrvpnclient.key上面是交互式的生成证书,还可以使用非交互式的方式生成证书View Code最后创建Diffie Hellman文件,这步需要一点时间,等它执行完就行# ./build-dh查看生成的Diffie hellman秘钥文件# ls /etc/openvpn/easy-rsa/keys | grep 'dh'dh2048.pem配置openvpn,编辑/etc/openvpn/server.conf文件,添加如下:local 172.16.0.100                               # 监听的ipport 1999                                        # 监听的端口,默认1194,我设置1999,根据你的需求改就行proto tcp                                        # 使用的协议,默认udp,因为经常要通过vpn传文件对可靠性要求比较高,所以用tcpdev tun                                          # 使用tun(隧道)模式,openvpn有两种模式,一种是TUN,另一种是TAPca   /etc/openvpn/easy-rsa/keys/ca.crt           # 这四条都是指定证书的路径,要确保路径存在或文件能够访问cert /etc/openvpn/easy-rsa/keys/vpnserver.crtkey  /etc/openvpn/easy-rsa/keys/vpnserver.key  dh   /etc/openvpn/easy-rsa/keys/dh2048.pemserver 10.8.0.0 255.255.255.0                    # 设置成server模式并给客户端分配的ip段,服务端会用其中.1和.2两个ip,这个网段不要和你的内网冲突ifconfig-pool-persist ipp.txt                    # 当vpn断开或重启后,可以利用该文件重新建立相同的IP地址连接push "route 172.16.0.0 255.255.255.0"            # 这三条是给客户端推的路由,客户端连上后会根据这个添加路由,vpn服务器后端有几个网段就写几个push "route 172.16.2.0 255.255.255.0"            # 这些路由的作用是告诉客户端去另一个子网都转发给TUN接口,类似于静态路由push "route 10.10.10.0 255.255.255.0"                       client-config-dir /etc/openvpn/ccd               # 客户端的个性配置目录,比如针对每个客户端推送不同的路由、配置不同的ipkeepalive 10 120                                 # 每10秒ping一次,如果超过120s认为对方已经down了,需要重连commpress lz4-v2                                 # 在vpn链接上启用压缩,服务端开启客户端也必须开启max-clients 100                                  # 最多有几个vpn客户端可以连user nobody                                      # 启动openvpn的用户和组,建议用nobodygroup nobody  commpress lz4-v2                                 # 开启压缩script-security 2                                # 脚本安全级别,2就行了,用于执行外部的脚本(可选)client-to-client # 允许vpn客户端之间通信 duplicate-cn # 允许多个客户端使用同一个证书登陆,生产环境建议为每个用户都生成自己的证书 persist-key # 通过keepalived检测后重新启动vpn,不重新读取keys,保留第一次使用的keys persist-tun # 通过keepalived检测后重新启动vpn,一直保持tun或tap设备是linkup status /var/log/openvpn/openvpn-status.log # openvpn的状态日志文件 log /var/log/openvpn/openvpn.log # openvpn的日志文件writepid /var/run/openvpn/server.pid             # pid文件verb 3                                           # 日志级别mute 20                                          # 如果连续出现20条相同的日志,只记录一条然后启动openvpn# service openvpn start# chkconfig --add openvpn# chkconfig --level 35 openvpn on会看到有个tun0接口并且添加了两条路由# ifconfig tun0tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00            inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1          RX packets:2499142 errors:0 dropped:0 overruns:0 frame:0          TX packets:2719489 errors:0 dropped:45 overruns:0 carrier:0          collisions:0 txqueuelen:100           RX bytes:895142072 (853.6 MiB)  TX bytes:1093625277 (1.0 GiB)# route -n | grep tun0    10.8.0.2        0.0.0.0         255.255.255.255 UH    0      0        0 tun010.8.0.0        10.8.0.2        255.255.255.0   UG    0      0        0 tun0启动了一个tun0网络接口,ip是10.8.0.1,P-t-P:10.8.0.2 是点到点的意思添加了两条路由,一个是主机路由 (UH),另一个是静态路由 (UG),表示去10.8.0.0网段的数据包下一跳是10.8.0.2添加一条SNAT规则,让源地址是10.8.0.0/24网段的地址进来转换成vpn服务器的内网地址(172.16.0.100),这样vpn客户端访问公司内网服务器的时候伪装成vpn服务器去访问# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source 172.16.0.100 # service iptables save# service iptables start# chkconfig --level 35 iptables on如果不用上面的SNAT方式,还有种做法是在所有公司内网中的主机或服务器上添加回程路由,这样才能回包给vpn客户端# route add 10.8.0.0 MASK 255.255.255.0 172.16.0.100        // 如果是windows# ip route add 10.8.0.0/24 via 172.16.0.100                 // 如果是linux如果数量少还好,但很多的话就比较麻烦,所以推荐用SNAT的方式,到了这里openvpn服务端已经配好了,客户端可以连了。2、客户端连接vpn服务器openvpn支持linux、window、mac等多种客户端,如果是windows客户端先安装openvpn-gui,一直下一步就行,默认会安装在C:\Program Files\OpenVPN进到config目录,创建一个vpnclient目文件夹,把服务器上的 /etc/openvpn/easy-rsa/keys下的ca.crt、vpnclient.crt、vpnclient.key三个证书文件拉下来放进去然后添加一个vpnclient.ovpn的文件,这个文件用来连接openvpn服务端vpnclient.ovpn文件的内容是client                        # 设置为client模式dev tun                       # 设置为tun模式,必须和服务端一致proto tcp                     # 使用的协议,必须和服务端一致remote 183.6.133.212 1999     # 指定openvpn服务器的地址和端口resolv-retry infinitenobindpersist-keypersist-tunca   ca.crtcert vpnclient.crtkey  vpnclient.keyremote-cert-tls serverauth-nocache                  # 不在内存中缓存密码commpress lz4-v2              # 启动压缩,必须和服务端一致 verb 3 然后连接openvpn,点击运行选 Connect  ,如果出现绿色图标说明vpn连接成功了.连接成功后会启一个网络连接,可以看到分配的ip地址是10.8.0.10 / 30以太网适配器 本地连接 2:   连接特定的 DNS 后缀 . . . . . . . :   描述. . . . . . . . . . . . . . . : TAP-Windows Adapter V9   物理地址. . . . . . . . . . . . . : 00-FF-0A-6B-5D-9D   DHCP 已启用 . . . . . . . . . . . : 是   自动配置已启用. . . . . . . . . . : 是   本地链接 IPv6 地址. . . . . . . . : fe80::bca0:7a3d:716c:5769(首选)   IPv4 地址 . . . . . . . . . . . . : 10.8.0.10(首选)   子网掩码  . . . . . . . . . . . . : 255.255.255.252   获得租约的时间  . . . . . . . . . : 2017年10月18日 3:43:41   租约过期的时间  . . . . . . . . . : 2018年10月18日 3:43:41   默认网关. . . . . . . . . . . . . :   DHCP 服务器 . . . . . . . . . . . : 10.8.0.9   DHCPv6 IAID . . . . . . . . . . . : 469827338   DHCPv6 客户端 DUID  . . . . . . . : 00-01-00-01-1C-F4-C8-B2-34-E6-D7-6C-5E-88   ........客户端还会添加路由,可以看下路由表,下面这些是服务端配置推送给客户端的路由,其实就是告诉客户端去这些网段都通过vpn服务器,类似于静态路由> route PRINT -4IPv4 路由表===========================================================================活动路由:网络目标        网络掩码          网关       接口       跃点数10.8.0.0    255.255.255.0     10.8.0.9  10.8.0.10     2010.8.0.8  255.255.255.252     在链路上    10.8.0.10    27610.8.0.10  255.255.255.255    在链路上    10.8.0.10    27610.8.0.11  255.255.255.255    在链路上    10.8.0.10    27610.10.10.0    255.255.255.0   10.8.0.9   10.8.0.10     20172.16.0.0    255.255.255.0   10.8.0.9   10.8.0.10     20172.16.2.0    255.255.255.0   10.8.0.9   10.8.0.10     20测试,ping下公司内网中的主机,看下是否能够访问,如果可以说明ok了C:\Users\Administrator ping 172.16.0.104正在 Ping 172.16.0.104 具有 32 字节的数据:来自 172.16.0.104 的回复: 字节=32 时间=6ms TTL=63172.16.0.104 的 Ping 统计信息:    数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位):    最短 = 6ms,最长 = 6ms,平均 = 6msC:\Users\Administrator> ping 172.16.2.1正在 Ping 172.16.2.1 具有 32 字节的数据:来自 172.16.2.1 的回复: 字节=32 时间=7ms TTL=253172.16.2.1 的 Ping 统计信息:    数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位):    最短 = 7ms,最长 = 7ms,平均 = 7msC:\Users\Administrator> ping 10.10.10.2正在 Ping 10.10.10.2 具有 32 字节的数据:来自 10.10.10.2 的回复: 字节=32 时间=6ms TTL=12610.10.10.2 的 Ping 统计信息:    数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位):    最短 = 6ms,最长 = 6ms,平均 = 6ms如果是linux客户端和windows一样,先安装openvpn# curl http://mirrors.aliyun.com/repo/epel-6.repo  -o  /etc/yum.repos.d/epel-6.repo --silent   # 添加阿里的EPEL源,有的话不用做.# yum install openvpn -y创建相关目录# mkdir /etc/openvpn/keys          # 放客户端的相关证书# mkdir /var/log/openvpn           # 放日志的目录将服务器上 /etc/openvpn/easy-rsa/keys 下的ca.crt、vpnclient.crt、vpnclient.key这些证书文件拉下来放到 /etc/openvpn/keys# ls /etc/openvpn/keysca.crt  vpnclient.crt  vpnclient.key编辑客户端的配置文件/etc/openvpn/client.conf,内容如下client                                      # 设置为clinet模式dev tun                                     # 使用tun模式,必须和服务端一致proto tcp                                   # 使用的协议,必须和服务端一致remote  183.6.133.212 1999                  # 指定openvpn服务端的ip和端口,有需要可以使用多个做高可用.resolv-retry infinitenobindpersist-keypersist-tunca   /etc/openvpn/keys/ca.crtcert /etc/openvpn/keys/vpnclient.crtkey  /etc/openvpn/keys/vpnclient.keyremote-cert-tls serverauth-nocacheuser nobodygroup nobodystatus   /var/log/openvpn/openvpn-status.loglog      /var/log/openvpn/openvpn.logwritepid /var/run/openvpn/client.pid        # 指定pid文件commpress lz4-v2                                    # 压缩数据,必须和服务端配置一样verb 3mute 20启动openvpn客户端# service openvpn start# chkconfig --add openvpn# chkconfig --level 35 openvpn on客户端启动后只有进程,因为它作为客户端去连服务端,不需要提供端口# ps aux | grep vpnnobody    4236  0.1  0.3  46916  3232 ?        Ss   01:36   0:00 /usr/sbin/openvpn --daemon --writepid /var/run/openvpn/client.pid --cd /etc/openvpn --config client.conf --script-security 2同样也会有个tun0网络接口# ifconfig tun0tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00            inet addr:10.8.0.14  P-t-P:10.8.0.13  Mask:255.255.255.255          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1          RX packets:0 errors:0 dropped:0 overruns:0 frame:0          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:100           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)此时我们可以看下路由表,下面这些路由就是根据服务器的配置(push)推送过来的,目的是通知客户端根据这个来添加路由,实际上就是告诉客户端去这些网段都转发给tun0接口,也就是vpn服务器,类似静态路由# route -n | grep tun010.8.0.13       0.0.0.0         255.255.255.255 UH    0    0    0 tun0    # 主机路由172.16.2.0      10.8.0.13       255.255.255.0   UG    0    0    0 tun0    # 去172.16.2.0 下一跳(网关)是10.8.0.1310.8.0.0        10.8.0.13       255.255.255.0   UG    0    0    0 tun0    # 去10.8.0.0   下一跳(网关)是10.8.0.13172.16.0.0      10.8.0.13       255.255.255.0   UG    0    0    0 tun0    # 去172.16.0.0 下一跳(网关)是10.8.0.1310.10.10.0      10.8.0.13       255.255.255.0   UG    0    0    0 tun0    # 去10.10.10.0 下一跳(网关)是10.8.0.13最后测试,ping下公司内网中的主机,看下是否能够访问,如果可以说明ok了# ping 172.16.0.104                                           # 可以通公司内网172.16.0.0段中的主机PING 172.16.0.104 (172.16.0.104) 56(84) bytes of data.64 bytes from 172.16.0.104: icmp_seq=1 ttl=63 time=7.52 ms^C--- 172.16.0.104 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 327msrtt min/avg/max/mdev = 7.524/7.524/7.524/0.000 ms# ping 172.16.2.1                                             # 可以通公司内网172.16.2.1段中的主机PING 172.16.2.1 (172.16.2.1) 56(84) bytes of data.64 bytes from 172.16.2.1: icmp_seq=1 ttl=253 time=205 ms--- 172.16.2.1 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 768msrtt min/avg/max/mdev = 205.701/205.701/205.701/0.000 ms# ping 10.10.10.2                                             # 可以通公司内网10.10.10.0段中的主机PING 10.10.10.2 (10.10.10.2) 56(84) bytes of data.64 bytes from 10.10.10.2: icmp_seq=1 ttl=126 time=5.86 ms^C--- 10.10.10.2 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 755msrtt min/avg/max/mdev = 5.865/5.865/5.865/0.000 ms数据包的走向是:客户端访问公司内网主机 ----- 通过路由转发 ---- vpn服务器(tun0) ---- SNAT -----  公司内网主机要点小结:vpn的作用就是让两个网络可以互通,就好像在同一个局域网里面一样openvpn配置好了后可以把它看成一个路由器,需要有点网络方面的知识才好理解其它功能及需求:1、如何给客户端指定配置,比如不同的客户端不同的ip地址、推送不同路由等先在server.conf中指定 client-config-dir目录,能够让openvpn访问的到client-config-dir /etc/openvpn/ccd        #  确保/etc/openvpn/ccd存在在/etc/openvpn/ccd目录下编辑一个与客户端同名的文件,比如想给vpnclient的这个客户端指定配置,那么就是/etc/openvpn/ccd/vpnclient,这些配置可以是ifconfig-push 10.8.0.9 10.8.0.10       # 指定客户端的IP地址,如果想固定客户端的ip可以这样做push "route 172.16.0.0 255.255.255.0"  # 推送指定的路由,不同的客户端推送不同的路由可以这样做   iroute 172.16.20.0 255.255.255.0       # 忽略路由push "dhcp-option DNS 202.96.128.166"  # 推送DNS..........2、openvpn服务端怎么做高可用如果vpn服务器只有一台的话就是个单点,如果有需求可以做高可用,做法是准备两台openvpn服务器,它们相关证书、配置都一样(可以做一个然后复制到另一个),然后在客户端的配置文件中指定两个remoteremote  第一个vpn服务器ip   端口remote  第二个vpn服务器ip   端口然后测试下模拟挂掉一个,能不能用、对使用有没有什么影响3、怎么给客户端推送指定的DNS可以在服务端server.conf或者ccd下面配置文件指定推送给客户端的dnspush "dhcp-option DNS 202.96.128.166" push "dhcp-option DNS 202.96.128.167"这种场景一般是要用到远程内网中的dns,用的不多4、怎么给客户端生成证书通过build-key生成客户端证书对于生成证书需要考虑的问题:是为每个用户生成证书、还是多个客户端使用一个证书? 如果是多个客户端用同一个证书登陆,优点是省事,缺点是如果想吊销这个证书那么就会影响所有的用户, 如果是每个用户都有自己的证书,优点是管理方便,缺点是麻烦(官方推荐为每个用户生成一个证书,每个用户用自己的证书连接vpn,虽然麻烦了点)5、如何把客户端的默认网关指向vpn服务器push "redirect-gateway def1 bypass-dhcp"需要的注意的是,如果这样配置会导致所有的流量都经过vpn服务器,这样的vpn服务器的压力会比较大,一般用的不是很多,除非必须要这么做三、吊销证书吊销证书是指让客户端的证书无效,那么被吊销证书的用户就不能连上vpn了。有这个样的场景,某个同事之前给他分配了vpn客户端,可以连vpn,现在它离职了,不想在让他在用vpn了,这时可以吊销它的证书。例如:吊销客户端 ( vpnclient ) 的证书.# cd /etc/openvpn/easy-rsa# source ./vars# ./revoke-full vpnclient   # 通过revoke-full脚本吊销证书, 吊销vpnclient这个客户端的证书 执行后将看到下面的提示,表示证书已经被吊销Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnfRevoking Certificate 03.Data Base UpdatedUsing configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnfclient02.crt: C = US, ST = CA, L = SanFrancisco, O = Fort-Funston, OU = MyOrganizationalUnit, CN = client02, name = EasyRSA, emailAddress = me@myhost.mydomainerror 23 at 0 depth lookup:certificate revoked  # 出现error 23 表示证书已经被吊销了需要注意的是到这步还没有彻底完成,此时客户端仍然可以连上。当通过 revoke-full 脚本吊销客户端的证书后它会在keys(我这里是/etc/openvpn/easy-rsa/keys)目录生成一个crl.pem(吊销证书列表 )文件,所以还需要在openvpn服务器的配置文件 /etc/openvpn/server.conf 添加:crl-verify /etc/openvpn/easy-rsa/keys/crl.pem      # 指定crl.pem文件的路径,必须存在并能够被启动openvpn的用户有权限读取,否则会报cannot read错误然后重启openvpn服务# service openvpn restartShutting down openvpn:                                     [  OK  ]Starting openvpn:                                          [  OK  ]最后测试被吊销证书的客户端能不能连上vpn服务,如果不能连上说明成功.此外,还可以通过查看/etc/openvpn/easy-ras/keys/index.txt文件,了解vpn客户端的吊销状态.R 开头的表示reovke,说明是吊销状态,V表示是正常的CN=vpnclient,表示客户端vpnclient已经被吊销# cat /etc/openvpn/easy-rsa/keys/index.txtV    270929154610Z        01    unknown    /C=US/ST=CA/L=SanFrancisco/O=Fort-Funston/OU=MyOrganizationalUnit/CN=vpnserver/name=EasyRSA/emailAddress=me@myhost.mydomainV    270929154708Z        02    unknown    /C=US/ST=CA/L=SanFrancisco/O=Fort-Funston/OU=MyOrganizationalUnit/CN=client01/name=EasyRSA/emailAddress=me@myhost.mydomainR    271005070515Z    171008142938Z    03    unknown    /C=US/ST=CA/L=SanFrancisco/O=Fort-Funston/OU=MyOrganizationalUnit/CN=vpnclient/name=EasyRSA/emailAddress=me@myhost.mydomain那么问题来了,又想恢复这个被吊销的客户端(vpnclient)呢?  同样可以在openvpn服务器的配置文件/etc/openvpn/server.conf注释或取消: crl-verify /etc/openvpn/easy-rsa/keys/crl.pem      # 注释或取消掉这行重启openvpn,客户端测试,如果能连上说明成功了,又可以连了四、故障与排错如果不成功,需要从各个方面排查:检查openvpn服务器端口和进程是否正常检查tun0接口和路由表是否正常检查证书的路径是否能够正常访问查看openvpn服务器日志(重点)检查防火墙是否做了限制,是否放通了openvpn的ip或端口使用tcpdump一节一节的抓包,看包到了那个环节原文链接:https://www.cnblogs.com/huangweimin/articles/7638943.html
  • [技术干货] 什么是虚拟路由器?
    虚拟路由器即Virtual Router,是一种软件功能。它提供了一个基于云的虚拟路由器,部署在x86服务器硬件的虚拟机实例上,在虚拟化平台上提供路由、交换、安全和VPN等功能,为用户提供网络通信服务。为什么需要虚拟路由器?随着企业业务越来越丰富,客户为了节约网络成本、业务快速上线,越来越多的企业开始在私有云或公有云上,通过部署VPC(Virtual Private Cloud,专有网络)的方式将企业网络和IT设施进行云化和虚拟化;此外,企业依赖的传统重要应用(例如Office、Salesforce等)也逐渐被应用提供商改以SaaS云化方式提供,据统计,未来将有85%的企业应用采用云的方式部署。伴随着业务云化不断深化发展,应用数量和流量激增,传统企业WAN网络已经无法满足企业基础设施和企业业务云化的要求,传统企业WAN网络面临诸多挑战:分支访问云应用从总部/DC绕行,延迟大,易产生性能瓶颈企业业务云化带来更大WAN网络带宽需求,专线成本逐年攀升企业无法在公有云网络与企业内网络实施一致的安全和管理策略传统企业WAN网络状态无感知,管理运维难度大为了解决上述问题,顺应网络设备云化和虚拟化的发展趋势,虚拟路由器应运而生。虚拟路由是NFV(Network Function Virtualization,网络功能虚拟化)的一种形式,其中传统的基于硬件的网络设备的功能被转换为可以在标准商业现成硬件上运行的软件,优点是降低硬件成本,不再需要专有硬件平台。虚拟路由器将IP路由功能从特定硬件中解放出来,可以更加自由的在网络中移动。它可以部署在企业总部、PoP接入点(Point of Presence 入网点)和云环境中,扩展企业网络到云内部,实施与企业内部网络一致的安全和管理策略,支持混合链路接入WAN网络,通过基于应用的智能选路,优化企业的云访问路径,提升企业访问云服务的体验。虚拟路由器是如何工作的?虚拟路由器工作原理与传统路由器相同。它运行着路由协议实例,有自己专用的I/O端口、缓存、地址空间、路由表和网络管理软件,可以连接设备在网络之间转发数据包。随着网络的不断发展,虚拟路由器的基本架构也在不断演进。
  • GRE VPN 技术原理笔记分享
    • GRE简称通用路由封装协议(Generic Rrouting Encapsulation)他的作用是把一种协议的报文封装在另外一种协议的报文中的技术,是一种隧道技术(只要这样子做,都称为隧道技术)。所以我们抓包看到的至少有两个头部,这两个头部的作用就是穿越异种网络。而且他还可以对组播报文进行封装,这是IPsec做不到的,也就是说我们可以在GRE上面跑路由协议(可以让两个异地的设备跑动态路由),并且可以和IPsec结合,保证更高的安全性。 • GRE虽然我们把它称为VPN技术,但是他一般来说不会单独使用,因为他缺乏安全性,但是他的优点很明显,非常的简单,成为来隧道技术的一个代表。 GRE:Generic Rrouting Encapsulation,通用路由封装协议。 • 一种三层的VPN封装技术。 • 在任意一种网络协议上传送任意一种其他网络协议的封装方法。 • 解决了跨越异种网络(不是一种网络)的报文传输问题,异种报文传输的通道被称为隧道(Tunnel)。 • 异种网络:不是同一种网络,这些网络默认是不兼容的,通讯是有问题的。 如:私网跨越公网到达私网,IPv4跨越IPv6到达IPv4,反之亦然。本身这个技术用到的方面很广,是一种隧道技术。 GRE优点 GRE缺点 建立隧道 点到点隧道 (一个点到一个点,多个点就要多个隧道口) 支持多种网络层协议 静态配置隧道参数 支持组播路由 部署负责,连接关系时代价巨大 配置简单,容易部署 缺乏安全性(最大的致命伤) GRE核心功能:建立隧道,打通私网 • 隧道一般配置在出口且有公网的设备上。 • 有了隧道以后,相当于在出口设备和对端出口设备接了一条专线,因为VPN就是用来代替专线的,可以理解为他是一条虚拟的专线,而且从路由层面上来说,正常我们数据从出口设备发出,到达目的网络会有多跳,而我们建立VPN后,只会算一跳,这些细节也会被隐藏。相当于也是减少了路径的跳数。 • • GRE over IPsec是实际应用场景较多的,GRE隧道一般很少单独使用,因为不安全, 所有用IPsec来保护,当然IPsec也可以单独使用。IPsec虽然很强大,有自己的隧道和加密技术,但是IPsec不支持路由组播,而GRE支持,所以使用IPsec保护GRE进行安全传输。所以是先有GRE然后再由IPsec来保护GRE,这也就是GRE over IPsec,这是实际需求的一种用法。 GRE封装:穿马甲 • 在原始封装的数据报文字段中加入新的IP头部,在新的IP报头和老的IP报头中间加一个协议,这就是GRE报头。 • GRE头部 • 把原本的IP报头当成货物,这个被称为乘客协议,GRE负责承载乘客协议的IP报文,可以理解为车辆,然后由新的IP报头在公网进行传输,公网设备只会查看新的IP报头,然后进行转发。 • GRE报头详解 • 协议号为47,经过GRE封装后,新的IP报头的协议号为47。GRE报头里面还有载荷协议,用于判断上层是上面类型。 • GRE封装后报头 GREVPN转发过程详解: • 私网到私网的路由不走缺省路由,要走隧道口,当我们收到一个私网路由时,这时设备会查找路由表。 • 查询路由表后,发现要去的地址的下一跳是隧道口,设备发现我们要走的是隧道口,所以会对数据报文进行GRE封装。 •  设备加了一个GRE头部,同时会有新的IP头部,这个新的IP头部,会有新的源和目标IP地址,就是建立时的隧道源和隧道目标。 • 隧道口的意义在于设备查找路由时找到出接口是隧道口,或者下一跳是隧道目标。 • 因此,私网数据报文保留,加上GRE报头和新的IP报头(隧道源和隧道目标)。 • 数据报文发送出去后,中途运营商的设备会根据外层的IP报头进行转发。 • 目标设备收到数据报文后,进行解封装,看到GRE报文后,会继续解封装,然后在看到原先发送的数据报文,发现是私网包头,进行查找路由,发现有就进行转发,回包也是如此,这就完成通讯。 • GRE通讯流程图 GREVPN配置: 命令 备注 Interface tunnel 0/x/x 创建隧道口。 Tunnel-protocol x 指定协议。 source 指定隧道源/接口/IP。 destination 指定隧道目地/IP。 Ip address x 添加隧道口地址(必须) Ip route-static d m tp 配置静态隧道口。 d=目的 m=掩码  tp=隧道接口/宣告口 Dis int tunnel x 查看隧道口信息。 Keepalive period 5 retry-times 3 开启Keepalive避免数据黑洞。 Gre checksum/key  配置简单校验/验证 GREVPN路由宣告注意事项:使用动态路由宣告时,千万不能宣告公网接口(只能宣告私网路由)。 • 如果a宣告了公网地址,那么b就会通过a的隧道口学习到这个公网地址,这个时候b的隧道目标就出现问题了,有两条路由,一是物理口的缺省,二是往隧道口的隧道目标,b向a发送数据报文时,会进行封装,如何通过隧道目标发送出去,然而隧道目标的下一跳还是隧道口,这样子就有问题了,会一直递归封装。 GREVPN隧道口虚假状态:只要设备上有到隧道目标的路由,那么隧道口即可激活。 • 隧道口激活UP状态很简单,只要有去隧道目标的路由,即可启用隧道口,他不判断隧道目标链路是否正常,没有检测机制,如果中间链路出现故障,那么会造成业务中断。 • 解决办法:开启keepalive,开启后,会通过隧道发送keepalive的数据包让对端回复,周期性发送,用于检测对端隧道是否可达。会发送keepalive message ,对端隧道会进行keepalive reply 回复。 
  • [技术干货] 什么是NaaS?
     英文全称:Network-as-a-Service 中文意思:网络即服务 随着网络技术、硬件技术的发展,网络的规模随之扩大,硬件设备比如路由器、交换机、vpn、防火墙等部署和使用就成了网络工程师最头疼的问题,手动配置不仅仅浪费人力、物力、财力,更重要的是容易出错。所以结合现在云计算技术,可以将网络云化,客户可以按需配置自己的网络,这个就跟云服务器一样,没内存了,我就加内存,没带宽了,我就加带宽 NaaS 的本质是构建看起来更像公共云的网络连接:自助服务、按需和动态。有一些解决方案专注于将自己嵌入到客户管理的现有公共云基础设施中,其他解决方案在战略性、密集连接的数据中心构建专用的高性能传统网络,还有一些在他们自己的云中构建自己的专用软件只是为了连接。每种方法都有自己的优缺点,必须权衡这些优缺点才能选择最合适的方法。每个解决方案的通用性是它是软件和硬件的混合物,可为客户创建一个自助服务平台,其强大之处在于它使网络运营商能够轻松集成和保护许多不同的网络。  为什么需要 NaaS? 在传统网络模式中,通信服务提供商会投入非常大的成本在网络基础设施、网络集成上,运营流程和网络域是紧密耦合的,新的网络元素必须与业务和运营支持系统 (B/OSS) 集成,支持特定服务或网络相关功能的离线系统集合,例如订单管理。这种集成既麻烦又昂贵,推出新服务通常需要 12 到 18 个月,相比之下,云提供商不断集成和测试新功能,在数小时内推出新服务,通信服务提供商的问题变得更加清晰。 传统运营也阻碍了通信服务提供商为企业提供他们想要的灵活的、类似云的服务。订单处理是分散的,技术人员必须手动访问多个 OSS 系统来收集和关联他们设计和提供服务所需的信息。这会导致服务执行过程缓慢且容易出错,并且可能需要数周甚至数月才能激活(甚至修改)服务。因此,通信服务提供商 在很大程度上仅限于长期合同附带的静态服务产品。 许多同样的问题会对故障解决过程产生负面影响,技术人员必须手动关联来自多个不同监控系统的事件和警报,这会减慢故障排除和补救工作,并使服务水平协议 (SLA) 面临风险。 种种问题就促使了 NaaS 的发展,NaaS 运营模型能够提供自动化的端到端服务设计和激活,以及闭环中的持续服务监控和优化。 NaaS 利用模型驱动的抽象来解耦 OSS 和网络层,网络的所有功能和资源(虚拟和物理)都汇总并发布在服务目录中,行业标准 API 用于将这些汇总的功能公开给 B/OSS 层。 NaaS 消除了服务实现过程中的人工干预。服务订单管理协调服务激活过程,编排自动化服务设计和供应,此外,整个服务生命周期都在闭环中进行管理,使用客户意图、策略、分析和人工智能来提供持续的服务保证和优化。  NaaS 优点 1、管理网络类型多样 NaaS 可以完全管理的不仅仅是广域网,局域网、安全、无线和 VOIP 等服务都可以被管理。 2、减少维护时间 NaaS 大大减少了工程师用于支持和维护网络的时间,不再需要花更多精力去管理网络,可以腾出更多时间去管理核心业务或未来的技术需求。 3、降低成本 NaaS 减少了项目总体支出,因为网络相关的硬件、软件、基础设施、支持和维护都是外包的。 4、安全性增强 NaaS 使用了许多新技术,例如 SD-WAN,以允许流量通过点对点网络链接和公共互联网安全移动,可以进一步保护网络安全。 5、可扩展的集中管理 NaaS 云管理功能可以提供网络域(数据中心、企业园区和 WAN)的统一管理,使组织能够轻松扩展网络。可以实施添加的托管服务来监督所有网络操作。 6、可持续性 有效的 NaaS 计划有助于缓解与旧硬件资源相关的安全和成本相关担忧。设备的再利用和适当的处置很重要,但成本很高,可持续再利用和报废是 NaaS 产品的关键属性,使组织能够更轻松地实现可持续发展目标。 
  • [新手课堂] 路由与交换VPN基础笔记分享
    本文转载自:https://bbs.huaweicloud.com/forum/thread-195705-1-1.htmlVPN产生背景: • 在Internet传输中,绝大部分数据的内容是明文传输,存在很多安全隐患,如(窃听,篡改,冒充) • 总部,分公司,办事处,出差人员,合作单位,需要访问总部网络资源的问题。 • 一个企业不可能把内部资源放在公网上,因为内部人员能访问得到,别人是否也能访问得到,这本身就是不安全的。 • 我们知道一个企业,他肯定是内网的,我们如何从一个内网接入到另外一个内网,这就是我们要学习的VPN的一个核心技术点,隧道。 • 在没有VPN之前,内网之间要进行互访,依靠运营商拉的专线(单独拉的线路)(价格贵,灵活性和扩展性不行) 笼统来说,网络专线就是为某个机构拉一条独立的网线,也就是一个独立的局域网,例如军事,银行等,让用户的数据传输变得可靠可信,专线的优点就是安全性好,QoS 可以得到保证。不过,专线租用价格也相对比较高,而且管理也需要专业人员。 •   VPN:Vritual Private Network,虚拟专用网络 •术语 备注 VPN 通过公共网络建立私有网络,并提供一定的安全性和服务质量保证。 IETF草案基于对IP的VPN定义,使用IP机制仿真出一个私有的广域网。 虚拟 用户不在需要拥有实际的专线,而是利用internet建立自己的私有网络 专用 用户可以为自己定制一个最符合自己要求的网络。  VPN技术核心: • • VPN有两大点: 1. 安全技术 • 密钥技术 • 身份认证 • 加解密技术 • 数据认证  2. 隧道技术 • GRE是一种非常强大的技术,隧道技术本身不代表某一种协议,而是一种理念,隧道技术的作用就是打通私网, 如:从一个私网到另外一个私网。从IPv6跨越到IPv4在到IPv6,这些都是隧道技术范畴。   • •隧道技术 隧道两端封装,解封装,用于建立数据通道。 隧道:从一个点到另外一个点的一条路,别人看不见。 身份认证 保证接入VPN的操作人员的合法性,有效性。 操作人员,使用人员的一些身份验证,用户密码,证书,指纹。 数据认证 数据在网络传输过程中不被非法篡改。 数据在传输过程中如何保证没有被更改和完整性。 加解密技术 保证数据在网络中传输不被非法获取。 通过特定算法,保证数据的私密性,保证传输过程中不被非法获取,就算被获取也无法破解。 密钥管理技术 在不安全的网络中安全地传递密钥。  • • VPN其实就是隧道和安全的结合体。 • VPN可以建立隧道,可以帮助我们通过外网访问到企业的内网,也可以从企业的内网到另外一个企业的内网,等等,只要有需求,就可以建立一个隧道,来解决需求。同时虽然这个隧道在公网上传递,但是他是安全的,就是运营商也看不到,因为这是加密的,我们可以选择高强度的加密方式保证数据的安全传输。   隧道技术图解: • 隧道技术是如何实现内网到内网。 • 所有的隧道技术,就是在原始的数据帧封装头部,添加新的封装报头。简单的说就是我们原先的数据报头走的是公网,而我们新加的数据报头,能让我们走隧道。 • 新封装的报头,包含了源和目标IP,发送出去后,对端IP收到数据报文后会剥离隧道(GRE)的报头,然后再读取剩下的封装,完成从内网到内网之间的通讯。  •  •  • 比如我们右边的设备,从10.2.2.2发送到10.1.1.1,正常请求到公网就会被丢弃(公网没有私网路由),所有我们通过VPN技术先进行加密(IPsec,AH,ESP),加密后就是密文,看不到是什么类型的数据包,再加上VPN头部和新的IP头部(包含源地址和目标地址),中间所有的公网设备都通过目标IP进行查找路由转发,到达对方的设备后,在进行剥离VPN相关的报头,然后看到真正要找的目标,回包也是同样的操作。 •   VPN的优点: • 节约成本 • 提高安全性 • 扩展性强 • • 在公网上为两个局域网开辟一条安全的数据传输隧道。  VPN的类型:(根据建设单位划分) •类型 备注 租用运营商专线搭建VPN网络 MPLS VPN  核心点在于,运营商会学习和接收企业的私网路由,然后再运营商的骨干网里进行传输。 用户自建企业VPN网络 GRE,PPTP,L2TP , IPsec,SSLVPN  • 运营商MPLSVPN。 •  • 用户自建VPN,更适合企业的需求,灵活的部署。 •   VPN的类型:(根据组网方式) •类型 备注 Remote-Access VPN 远程访问VPN 适合出差员工,移动办公等VPN拨号接入的场景。 员工可以在任何能够接入公网的地方,通过远程拨号接入企业内网,从而访问内网资源。 通常拨号方IP不固定。 Site-to-Site VPN 站点到站点VPN 适合各分支机构,合作伙伴,客户,供应商间的互联。 双方都有固定的IP。建立好后,不用进行拨号,可以直接进行访问。  Remote Access VPN • • 出差员工通过公网连接到公司的VPN出口服务,进行拨号远程接入即可。 • 有可能VPN服务在内网内,这时需要通过NAT服务器进行映射就行。这样子就可以通过VPN访问内网资源了。 •   Site to site • • 服务都在出口设备固定搭建好了,企业员工可以直接进行访问。不需要进行拨号,两个服务类型的VPN可以同时存在,这并不矛盾。 • 而且会在出口做好策略,哪些流量加密走VPN,哪些不走(上网用途)。 •  • 以上两种形式的VPN我们都可能会用到,包括像SSLVPN,也属于远程接入VPN。 • Site to site 一般也叫L2L(lan to lan)局域网到局域网。 • 适合场景不一样,但是需求和功能是一样的。 •   VPN类型:(根据实现层次,协议划分) • 按协议划分VPN类型,具体VPN实现的技术就这些。 • 分为二层VPN(PPTP,L2P,L2TP),三层VPN(IPsec,GRE)和七层VPN(SSLVPN)。 • 追求最安全的最好使用L7层VPN,SSLVPN。 • L2VPN使用的都是PPPOE加上以太网的封装来实现的,所以和拨号也是有关系的,所以在二层里面很多都离不开PPP这个协议。 • PPTP是微软搞出来的,所以对其他的一些厂商兼容性不太行,因此思科又搞了一个L2F(F代表转发)出来的,L2TP是微软和思路技术的结合。 • • 其实GRE没有任何的安全性,他不进行保护,他只是告诉你应用的范围,只有IPsec和SSLVPN才会有真正的加密,如果要加密和安全,只有IPsec和SSLVPN。 • L2TP没有加密技术也没有认证技术,但是能使用IPsec加入进来,也就是说他们是可以联动的。 • IPsec可以单独使用,也可以用它来保护GRE和L2TP。本身GRE和L2TP是缺乏安全技术的,但是可以通过IPsec来解决这个问题。 • GRE是最强的隧道技术,但是他没有安全性,所以一般不会单独使用他。一般会使用IPsec来保护,或者单独使用IPsec。GRE用于IPv6跨越IPv4在到IPv6,这种时候会用到GRE。 • SSLVPN是应用层,所以他直接对应用层数据进行保护,认证方法较多, • L2TP的端口类型是UDP 1701。PPTP的端口类型是TCP 1723。 
  • [技术干货] 路由与交换VPN基础笔记分享
    VPN产生背景: • 在Internet传输中,绝大部分数据的内容是明文传输,存在很多安全隐患,如(窃听,篡改,冒充) • 总部,分公司,办事处,出差人员,合作单位,需要访问总部网络资源的问题。 • 一个企业不可能把内部资源放在公网上,因为内部人员能访问得到,别人是否也能访问得到,这本身就是不安全的。 • 我们知道一个企业,他肯定是内网的,我们如何从一个内网接入到另外一个内网,这就是我们要学习的VPN的一个核心技术点,隧道。 • 在没有VPN之前,内网之间要进行互访,依靠运营商拉的专线(单独拉的线路)(价格贵,灵活性和扩展性不行) 笼统来说,网络专线就是为某个机构拉一条独立的网线,也就是一个独立的局域网,例如军事,银行等,让用户的数据传输变得可靠可信,专线的优点就是安全性好,QoS 可以得到保证。不过,专线租用价格也相对比较高,而且管理也需要专业人员。 •   VPN:Vritual Private Network,虚拟专用网络 • 术语 备注 VPN 通过公共网络建立私有网络,并提供一定的安全性和服务质量保证。 IETF草案基于对IP的VPN定义,使用IP机制仿真出一个私有的广域网。 虚拟 用户不在需要拥有实际的专线,而是利用internet建立自己的私有网络 专用 用户可以为自己定制一个最符合自己要求的网络。  VPN技术核心: • • VPN有两大点: 1. 安全技术 • 密钥技术 • 身份认证 • 加解密技术 • 数据认证  2. 隧道技术 • GRE是一种非常强大的技术,隧道技术本身不代表某一种协议,而是一种理念,隧道技术的作用就是打通私网, 如:从一个私网到另外一个私网。从IPv6跨越到IPv4在到IPv6,这些都是隧道技术范畴。   • • 隧道技术 隧道两端封装,解封装,用于建立数据通道。 隧道:从一个点到另外一个点的一条路,别人看不见。 身份认证 保证接入VPN的操作人员的合法性,有效性。 操作人员,使用人员的一些身份验证,用户密码,证书,指纹。 数据认证 数据在网络传输过程中不被非法篡改。 数据在传输过程中如何保证没有被更改和完整性。 加解密技术 保证数据在网络中传输不被非法获取。 通过特定算法,保证数据的私密性,保证传输过程中不被非法获取,就算被获取也无法破解。 密钥管理技术 在不安全的网络中安全地传递密钥。  • • VPN其实就是隧道和安全的结合体。 • VPN可以建立隧道,可以帮助我们通过外网访问到企业的内网,也可以从企业的内网到另外一个企业的内网,等等,只要有需求,就可以建立一个隧道,来解决需求。同时虽然这个隧道在公网上传递,但是他是安全的,就是运营商也看不到,因为这是加密的,我们可以选择高强度的加密方式保证数据的安全传输。   隧道技术图解: • 隧道技术是如何实现内网到内网。 • 所有的隧道技术,就是在原始的数据帧封装头部,添加新的封装报头。简单的说就是我们原先的数据报头走的是公网,而我们新加的数据报头,能让我们走隧道。 • 新封装的报头,包含了源和目标IP,发送出去后,对端IP收到数据报文后会剥离隧道(GRE)的报头,然后再读取剩下的封装,完成从内网到内网之间的通讯。  •  •  • 比如我们右边的设备,从10.2.2.2发送到10.1.1.1,正常请求到公网就会被丢弃(公网没有私网路由),所有我们通过VPN技术先进行加密(IPsec,AH,ESP),加密后就是密文,看不到是什么类型的数据包,再加上VPN头部和新的IP头部(包含源地址和目标地址),中间所有的公网设备都通过目标IP进行查找路由转发,到达对方的设备后,在进行剥离VPN相关的报头,然后看到真正要找的目标,回包也是同样的操作。 •   VPN的优点: • 节约成本 • 提高安全性 • 扩展性强 • • 在公网上为两个局域网开辟一条安全的数据传输隧道。  VPN的类型:(根据建设单位划分) • 类型 备注 租用运营商专线搭建VPN网络 MPLS VPN  核心点在于,运营商会学习和接收企业的私网路由,然后再运营商的骨干网里进行传输。 用户自建企业VPN网络 GRE,PPTP,L2TP , IPsec,SSLVPN  • 运营商MPLSVPN。 •  • 用户自建VPN,更适合企业的需求,灵活的部署。 •   VPN的类型:(根据组网方式) • 类型 备注 Remote-Access VPN 远程访问VPN 适合出差员工,移动办公等VPN拨号接入的场景。 员工可以在任何能够接入公网的地方,通过远程拨号接入企业内网,从而访问内网资源。 通常拨号方IP不固定。 Site-to-Site VPN 站点到站点VPN 适合各分支机构,合作伙伴,客户,供应商间的互联。 双方都有固定的IP。建立好后,不用进行拨号,可以直接进行访问。  Remote Access VPN • • 出差员工通过公网连接到公司的VPN出口服务,进行拨号远程接入即可。 • 有可能VPN服务在内网内,这时需要通过NAT服务器进行映射就行。这样子就可以通过VPN访问内网资源了。 •   Site to site • • 服务都在出口设备固定搭建好了,企业员工可以直接进行访问。不需要进行拨号,两个服务类型的VPN可以同时存在,这并不矛盾。 • 而且会在出口做好策略,哪些流量加密走VPN,哪些不走(上网用途)。 •  • 以上两种形式的VPN我们都可能会用到,包括像SSLVPN,也属于远程接入VPN。 • Site to site 一般也叫L2L(lan to lan)局域网到局域网。 • 适合场景不一样,但是需求和功能是一样的。 •   VPN类型:(根据实现层次,协议划分) • 按协议划分VPN类型,具体VPN实现的技术就这些。 • 分为二层VPN(PPTP,L2P,L2TP),三层VPN(IPsec,GRE)和七层VPN(SSLVPN)。 • 追求最安全的最好使用L7层VPN,SSLVPN。 • L2VPN使用的都是PPPOE加上以太网的封装来实现的,所以和拨号也是有关系的,所以在二层里面很多都离不开PPP这个协议。 • PPTP是微软搞出来的,所以对其他的一些厂商兼容性不太行,因此思科又搞了一个L2F(F代表转发)出来的,L2TP是微软和思路技术的结合。 • • 其实GRE没有任何的安全性,他不进行保护,他只是告诉你应用的范围,只有IPsec和SSLVPN才会有真正的加密,如果要加密和安全,只有IPsec和SSLVPN。 • L2TP没有加密技术也没有认证技术,但是能使用IPsec加入进来,也就是说他们是可以联动的。 • IPsec可以单独使用,也可以用它来保护GRE和L2TP。本身GRE和L2TP是缺乏安全技术的,但是可以通过IPsec来解决这个问题。 • GRE是最强的隧道技术,但是他没有安全性,所以一般不会单独使用他。一般会使用IPsec来保护,或者单独使用IPsec。GRE用于IPv6跨越IPv4在到IPv6,这种时候会用到GRE。 • SSLVPN是应用层,所以他直接对应用层数据进行保护,认证方法较多, • L2TP的端口类型是UDP 1701。PPTP的端口类型是TCP 1723。 
  • [技术干货] 关于SSL VPN和IPSec VPN之间的联系和区别
    https://support.huaweicloud.com/vpn_faq/zh-cn_topic_0187565709.html使用场景IPsec VPN:连通的是两个局域网,如分支机构与总部(或华为云VPC)之间、本地IDC与云端VPC的子网;即IPsec VPN是网对网的连接。SSL VPN:连通的是一个客户端到一个局域网络,如出差员工的便携机访问公司内网。连接方式IPsec VPN:要求两端有固定的网关设备,如防火墙或路由器; 管理员需要分别配置两端网关完成IPsec VPN协商。SSL VPN:需要在主机上安装指定的Client软件,通过用户名/密码拨号连接至SSL设备。
  • [技术干货] ensp7月学习笔记1
    首先创建gre隧道2、创建IKE提议 [AR 1]ike proposal 1 # 创建IKE提议 [AR 1-ike-proposal-1]encryption-algorithm 3des-cbc # 指定加密算法 [AR 1-ike-proposal-1]authentication-algorithm md5 # 认证算法 [AR 3]ike proposal 1 # 创建IKE提议 [AR 3-ike-proposal-1]encryption-algorithm 3des-cbc # 指定加密算法 [AR 3-ike-proposal-1]authentication-algorithm md5 # 认证算法 3、配置IKE对等体 [AR 1]ike peer number v2 # 创建number的对等体 [AR 1-ike-peer-numberone]pre-shared-key simple 5201314 # 共享密钥 [AR 1-ike-peer-numberone]ike-proposal 1 [AR 3]ike peer number v2 # 创建number的对等体 [AR 3-ike-peer-numberone]pre-shared-key simple 5201314 # 共享密钥 [AR 3-ike-peer-numberone]ike-proposal 1 4、配置IPSec提议 [AR 1]ipsec proposal 1 [AR 1-ipsec-proposal-1]esp encryption-algorithm 3des # esp的加密算法 [AR 3]ipsec proposal 1 [AR 3-ipsec-proposal-1]esp encryption-algorithm 3des # esp的加密算法 5、配置IPSec文件 [AR 1]ipsec profile gre [AR 1-ipsec-profile-gre]ike-peer number [AR 1-ipsec-profile-gre]proposal 1 [AR 3]ipsec profile gre [AR 3-ipsec-profile-gre]ike-peer number [AR 3-ipsec-profile-gre]proposal 1 6、对GRE隧道进行保护 [AR 1]interface Tunnel 0/0/0 [AR 1-Tunnel0/0/0]description XXXXX # XXXXX可以自定义 [AR 1-Tunnel0/0/0]tunnel-protocol gre [AR 1-Tunnel0/0/0]source 200.1.1.1 [AR 1-Tunnel0/0/0]destination 200.2.2.2 [AR 1-Tunnel0/0/0]ipsec profile gre # 对GRE隧道进行保护 [AR 3]interface Tunnel 0/0/0 [AR 3-Tunnel0/0/0]description XXXXX [AR 3-Tunnel0/0/0]tunnel-protocol gre [AR 3-Tunnel0/0/0]source 200.2.2.2 [AR 3-Tunnel0/0/0]destination 200.1.1.1 [AR 3-Tunnel0/0/0]ipsec profile gre # 对GRE隧道进行保护 ———————————————— 版权声明:本文为CSDN博主「ZXW_NUDT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/ZXW_NUDT/article/details/115481067
  • [新手课堂] 鲲鹏远程实验室vpn连接不上,都试了一天了,请问一下是不是今天vpn连不上吗
    鲲鹏远程实验室vpn连接不上,都试了一天了,请问一下是不是今天vpn连不上吗
  • [技术干货] VPN组网、原理分析
    VPN(Virtual Private Network,虚拟专用网)是一种在公用网络上建立专用网络的技术。它之所以称之为虚拟网,主要是因为VPN的两个节点之间并没有像传统专用网那样使用端到端的物理链路,而是架构在公用网络如Internet之上的逻辑网络,用户数据通过逻辑链路传输。按照VPN协议分,常见的VPN种类有:IPsec、SSL、GRE、PPTP和L2TP等。其中IPsec是通用性较强的一种VPN技术,适用于多种网络互访的场景。IPsec VPN是指采用IPsec实现远程接入的一种VPN技术,通过在公网上为两个或多个私有网络之间建立IPsec隧道,并通过加密和验证算法保证VPN连接的安全。IPsec VPN保护的是点对点之间的通信,通过IPsec VPN可以在主机和主机之间、主机和网络安全网关之间或网络安全网关(如路由器、防火墙)之间建立安全的隧道连接。其协议主要工作在IP层,在IP层对数据包进行加密和验证。相对于其他VPN技术,IPsec VPN安全性更高,数据在IPsec隧道中都是加密传输,但相应的IPsec VPN在配置和组网部署上更复杂。IPsec的工作原理大致可以分为4个阶段:识别“感兴趣流”。网络设备接收到报文后,通常会将报文的五元组等信息和IPsec策略进行匹配来判断报文是否要通过IPsec隧道传输,需要通过IPsec隧道传输的流量通常被称为“感兴趣流”。协商安全联盟(Security Association,以下简称SA)。SA是通信双方对某些协商要素的约定,比如双方使用的安全协议、数据传输采用的封装模式、协议采用的加密和验证算法、用于数据传输的密钥等,通信双方之间只有建立了SA,才能进行安全的数据传输。识别出感兴趣流后,本端网络设备会向对端网络设备发起SA协商。在这一阶段,通信双方之间通过IKE协议先协商建立IKE SA(用于身份验证和密钥信息交换),然后在IKE SA的基础上协商建立IPsec SA(用于数据安全传输)。数据传输。IPsec SA建立成功后,双方就可以通过IPsec隧道传输数据了。IPsec为了保证数据传输的安全性,在这一阶段需要通过AH或ESP协议对数据进行加密和验证。加密机制保证了数据的机密性,防止数据在传输过程中被窃取;验证机制保证了数据的真实可靠,防止数据在传输过程中被仿冒和篡改。如图所示,IPsec发送方会使用加密算法和加密密钥对报文进行加密,即将原始数据“乔装打扮”封装起来。然后发送方和接收方分别通过相同的验证算法和验证密钥对加密后的报文进行处理得到完整性校验值ICV。如果两端计算的ICV相同则表示该报文在传输过程中没有被篡改,接收方对验证通过的报文进行解密处理;如果ICV不相同则直接丢弃报文。MPLS VPN:使用场景在运营商骨干网络上提供L3VPN业务,利用BGP协议发布路由信息,在骨干网内部使用MPLS转发VPN报文。概念CE(Consumer Edge):用户边缘路由器,与运营商网络直接相连的路由器。感知不到VPN的存在,一个CE设备只能对应一个VPN主要功能就是将VPN客户的路由通告给PE,以及从PE学习同一个VPN下其他站点的路由PE(Provider Edge):运行商(骨干网)边缘路由器,与用户网络相连的路由器。负责VPN业务接入,处理VPN-IPV4路由使用VRF对VPN客户进行隔离通过与客户设备CE进行路由协议,以便获取客户路由,并将路由生成VPNv4前缀放入MPLS VPN骨干网传递到对端PEP(Provider):骨干网路由器,与PE或其他P相连。负责快速转发数据不知道VPN客户网络,以及客户的路由。只负责在骨干网内运载标签数据VRF(Virtual Router Forwarding):PE上的虚拟路由器(路由进程)。一张独立的路由表,包括独立的地址空间一组归属于这个VRF的接口的集合,一组只用于本VRF的路由协议一个VPN对应一个VRFRD(Route-Distinguisher):路由标识符BGP进程用该字段区分不同VPN,有了RD后就可以解决不同VPN之间的IP地址重叠问题,VPN用户的IP地址不再是整个系统全局唯一,而是VPN内唯一即可。RT(Route-Target)每个VRF表达自己的路由输出和输出方式,主要用于控制VPN路由的发布和安装策略。
  • [新手课堂] 鲲鹏远程实验室VPN无法连接
    各位大佬,请老教个问题,申请成功鲲鹏远程实验室后,按照邮件安装UNIVPN后,导入配置,无法连接成功是怎么回事?换用华为的secoClient导入配置也是相同问题。感觉奇怪的是,发的邮件里,VPN有10001的端口号,而附中的ini配置使用的应该是l2tp,默认应该使用的是1701端口吧,并且配置不能修改端口号。
  • [问题求助] VPN无法登陆
    【功能模块】VPN连接出错【操作步骤&问题现象】VPN连接出错【截图信息】【日志信息】(可选,上传日志内容或者附件)无
  • [问题求助] 【鲲鹏服务器】【OpenVPN功能】可以连上,却无法访问内网中的其他主机
    【功能模块】我这边有四台ECS,想组建个VPN网络,安装了openvpn的软件,目前的情况下客户端可以连上服务器,但是无法访问内网中的其他主机,麻烦协助排查下问题,谢谢【操作步骤&问题现象】使用华为的源,执行指令dnf install -y openvpn安装easy-rsayum install -y openssl lzo pam easy-rsacd /usr/share/easy-rsa/3/之后的都是参考https://blog.csdn.net/zzchances/article/details/123862632目前客户端可以正常连接到openvpn,但是无法访问内网机子【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 带你熟悉netconf报文系列:由netconf报文推导cli命令的方法
    为了方便一些熟悉命令行但不熟悉netconf报文的工程师能快速理解netconf报文,并与对应的命令行联系起来,下面给出一套分析方法。本次我们以下发L3VPN业务到NE8000M8设备为例说明~相关配置的命令行可以在华为support网站上查看NE8000M8产品文档。那不多说,我们先来直观感受一下cli命令行和Netconf报文的区别吧。CLI命令行ip vpn-instance 5G-RAN ipv4-family route-distinguisher 100:1 vpn-target 100:11 export-extcommunity vpn-target 100:11 import-extcommunity bgp yang-mode enable bgp 100 ipv4-family vpn-instance 5G-RAN import-route direct import-route static peer 2.2.2.2 as-number 100 interface GigabitEthernet 0/5/0.1 ip binding vpn-instance 5G-RAN ip address 20.1.2.9 255.255.255.0Netconf报文<bgp xmlns="urn:huawei:yang:huawei-bgp"> <global> <yang-enable>true</yang-enable> </global> </bgp> <network-instance xmlns="urn:huawei:yang:huawei-network-instance"> <instances> <instance xmlns:ns0="urn:ietf:params:xml:ns:netconf:base:1.0" ns0:operation="merge"> <name>5G-RAN</name> <bgp xmlns="urn:huawei:yang:huawei-bgp"> <base-process> <afs> <af> <type>ipv4uni</type> <ipv4-unicast> <import-routes> <import-route> <protocol>direct</protocol> <process-id>0</process-id> </import-route> <import-route> <protocol>static</protocol> <process-id>0</process-id> </import-route> </import-routes> </ipv4-unicast> </af> </afs> <peers> <peer> <address>2.2.2.2</address> <remote-as>100</remote-as> </peer> </peers> </base-process> </bgp> <afs xmlns="urn:huawei:yang:huawei-l3vpn"> <af> <type>ipv4-unicast</type> <route-distinguisher>100:1</route-distinguisher> <tunnel-policy>LDP</tunnel-policy> <vpn-targets> <vpn-target> <value>100:11</value> <type>export-extcommunity</type> </vpn-target> <vpn-target> <value>100:11</value> <type>import-extcommunity</type> </vpn-target> </vpn-targets> </af> </afs> </instance> </instances> </network-instance> <ifm xmlns="urn:huawei:yang:huawei-ifm"> <interfaces> <interface> <name>GigabitEthernet0/5/0.1</name> <ipv4 xmlns="urn:huawei:yang:huawei-ip"> <addresses> <address xmlns:ns0="urn:ietf:params:xml:ns:netconf:base:1.0" ns0:operation="merge"> <ip>20.1.2.9</ip> <mask>255.255.255.0</mask> <type>main</type> </address> </addresses> </ipv4> </interface> </interfaces> </ifm> <ifm xmlns="urn:huawei:yang:huawei-ifm"> <interfaces> <interface xmlns:ns0="urn:ietf:params:xml:ns:netconf:base:1.0" ns0:operation="merge"> <name>GigabitEthernet0/5/0.1</name> <type>GigabitEthernet</type> <description>connect to pe2</description> <vrf-name>5G-RAN</vrf-name> </interface> </interfaces> </ifm>是不是觉得Netconf报文太长了,没关系,下面我们来分段解析我们的报文,并推导出我们报文对应的命令行。1. 模块一(使能使用YANG接口下发BGP配置)<bgp xmlns="urn:huawei:yang:huawei-bgp"> <global> <yang-enable>true</yang-enable> </global> </bgp>Netconf报文报文解析对应命令行<bgp xmlns="urn:huawei:yang:huawei-bgp">…</bgp>这一层报文表示此模块配置是依据huawei-bgp.yang模型的结构内容,是对bgp的配置。bgp yang-mode enable<global>  <yang-enable>true</yang-enable></global> <global>表示对全局的配置。<yang-enable>表示是否使用yang接口下发配置。2. 模块二(创建VPN实例5G-RAN,并配置VPN路由引入,引入静态路由和直连路由,配置BGP对等体。)<network-instance xmlns="urn:huawei:yang:huawei-network-instance"> <instances> <instance xmlns:ns0="urn:ietf:params:xml:ns:netconf:base:1.0" ns0:operation="merge"> <name>5G-RAN</name> <bgp xmlns="urn:huawei:yang:huawei-bgp"> <base-process> <afs> <af> <type>ipv4uni</type> <ipv4-unicast> <import-routes> <import-route> <protocol>direct</protocol> <process-id>0</process-id> </import-route> <import-route> <protocol>static</protocol> <process-id>0</process-id> </import-route> </import-routes> </ipv4-unicast> </af> </afs> <peers> <peer> <address>2.2.2.2</address> <remote-as>100</remote-as> </peer> </peers> </base-process> </bgp> ……(模块三配置) </instance> </instances> </network-instance>Netconf报文报文解析对应命令行<network-instance xmlns="…: huawei-bgp"><instances><instance xmlns:… >      <name>5G-RAN</name>      ……    </instance></instances></network-instance>这几层报文表示创建一个名为5G-RAN的L3VPN实例(instance),并开始配置。bgp 100  ipv4-family vpn-instance 5G-RAN<bgp xmlns=…><base-process>    <afs>      <af>        <type>ipv4uni</type>        ……      </af>    </afs>  </base-process></bgp>这几层报文是对bgp的相关配置:1.       <af>(address family)表示开始bgp地址族配置。2.       <type>表示配置bgp实例的地址族类型。由于这几层报文在instance的下一层,所以这一段配置的是5G-RAN的bgp路由引入。<ipv4-unicast><import-routes><import-route>      <protocol>direct</protocol><process-id>0</process-id></import-route>    <import-route>      <protocol>static</protocol>      <process-id>0</process-id>    </import-route>  </import-routes></ipv4-unicast><af>的内层报文,由于之前type类型为ipv4地址族,所以继续配置ipv4单播选项,引入静态路由和直连路由。1.       <import-routes>可引入多个路由。2.       <import-route>引入一条路由。3.       <protocol>引入的路由协议类型。4.       <process-id>引入路由协议的id。bgp 100  ipv4-family vpn-instance 5G-RAN  import-route direct  import-route static<peers><peer><address>2.2.2.2</address><remote-as>100</remote-as></peer></peers><peer>配置bgp对等体。<address>配置对等体连接地址,<remote-as>配置对等体AS号。bgp 100  ipv4-family vpn-instance 5G-RAN    import-route direct    import-route static    peer 2.2.2.2 as-number 1003. 模块三(配置VPN实例5G-RAN的 RT和RD值)<network-instance xmlns="urn:huawei:yang:huawei-network-instance"> <instances> <instance xmlns:ns0="urn:ietf:params:xml:ns:netconf:base:1.0" ns0:operation="merge"> <name>5G-RAN</name> ……(模块二配置) <afs xmlns="urn:huawei:yang:huawei-l3vpn"> <af> <type>ipv4-unicast</type> <route-distinguisher>100:1</route-distinguisher> <tunnel-policy>LDP</tunnel-policy> <vpn-targets> <vpn-target> <value>100:11</value> <type>export-extcommunity</type> </vpn-target> <vpn-target> <value>100:11</value> <type>import-extcommunity</type> </vpn-target> </vpn-targets> </af> </afs> </instance> </instances> </network-instance>Netconf报文报文解析对应命令行<afs xmlns="…: huawei-l3vpn">  <af>    <type>ipv4-unicast</type>    ……  </af></afs>这几层报文是对地址族相关配置:1.       <af>(address family)表示开始配置VPN实例的地址族。2.       <type>表示配置VPN实例的地址族类型。由于这几层报文在instance的下一层,所以这一段配置的是5G-RAN的地址族。ip vpn-instance 5G-RAN  ipv4-family<route-distinguisher>100:1</route-distinguisher><tunnel-policy>LDP</tunnel-policy><vpn-targets>  <vpn-target><value>100:11</value><type>export-extcommunity</type>  </vpn-target>  <vpn-target><value>100:11</value><type>import-extcommunity</type>  </vpn-target></vpn-targets><af>的内层报文,开始配置RD和RT(vpn-target)值。ip vpn-instance 5G-RAN  ipv4-family    route-distinguisher 100:1    vpn-target 100:11 export-extcommunity    vpn-target 100:11 import-extcommunity 4. 模块四(创建子接口,配置接口地址并绑定VPN实例)<ifm xmlns="urn:huawei:yang:huawei-ifm"> <interfaces> <interface> <name>GigabitEthernet0/5/0.1</name> <ipv4 xmlns="urn:huawei:yang:huawei-ip"> <addresses> <address xmlns:ns0="urn:ietf:params:xml:ns:netconf:base:1.0" ns0:operation="merge"> <ip>20.1.2.9</ip> <mask>255.255.255.0</mask> <type>main</type> </address> </addresses> </ipv4> </interface> </interfaces> </ifm> <ifm xmlns="urn:huawei:yang:huawei-ifm"> <interfaces> <interface xmlns:ns0="urn:ietf:params:xml:ns:netconf:base:1.0" ns0:operation="merge"> <name>GigabitEthernet0/5/0.1</name> <type>GigabitEthernet</type> <description>connect to pe2</description> <vrf-name>5G-RAN</vrf-name> </interface> </interfaces> </ifm>Netconf报文报文解析对应命令行<ifm xmlns="urn:huawei:yang:huawei-ifm">  <interfaces>  <interface>   <name>GigabitEthernet0/5/0.1</name>   ……  </interface>  </interfaces></ifm>这几层报文是对子接口的相关配置:1.       <ifm>表示接口配置。2.       <interface>表示进入接口视图。3.       <name>表示接口的名称。总的来看本段报文表示开始进入某个接口下的配置。interface GigabitEthernet 0/5/0.1<ipv4 xmlns="urn:huawei:yang:huawei-ip"><addresses><address xmlns:… >      <ip>20.1.2.9</ip><mask>255.255.255.0</mask>      <type>main</type>    </address>  </addresses></ipv4>这几层报文是配置接口下的ip地址:1.       由<ipv4>可以看出,下面的配置都是关于ipv4的。2.       <address>联合上一层的<ipv4>表明是对ip地址的配置。3.       具体到配置<ip>ip地址;<mask>掩码地址。interface GigabitEthernet 0/5/0.1  ip address 20.1.2.9 255.255.255.0<ifm xmlns="urn:huawei:yang:huawei-ifm">  <interfaces>    <interface xmlns:......><name>GigabitEthernet0/5/0.1</name>      <type>GigabitEthernet</type>      <description>connect to pe2</description>      <vrf-name>5G-RAN</vrf-name>    </interface>  </interfaces></ifm>由<ifm>可看出这一部分是对接口的配置:1.       <interface>和<name>表示开始配置GigabitEthernet0/5/0.1的接口。2.       <vrf-name>表示在此接口下绑定vpn。interface GigabitEthernet 0/5/0.1  ip address 20.1.2.9 255.255.255.0  ip binding vpn-instance 5G-RAN那最后让我们来总结一下怎么分析Netconf转CLI命令行的吧首先要明确,不论是Netconf报文还是CLI命令行,最终目的都是实现业务的配置。Netconf报文内容是基于下发业务的基础之上的;Netconf报文的结构也与命令行相似。所以我们要聚焦在两种下发配置的形式与业务之间的联系,理解每一句命令行或每一层报文与业务之间的相关性之后,就不难将两者之间进行转化。(命令行查询请查看相应设备的产品手册。)1. 从结构上分析比如下面这个表格的情况:配置业务CLI命令结构Netconf报文结构配置某接口下的IP地址interface XXX  ip address XXX<ifm>  <interfaces>  <interface>           <name>XXX</name>           <ipv4>               <addresses>                   <address>                        <ip>XXX</ip>                        <mask>XXX</mask>                   </address>               </addresses>           </ipv4>       </interface>   </interfaces></ifm> 配置接口下的IP地址,大概的业务层次就是:先进入某接口视图,然后配置ip地址、掩码等。不难发现,CLI命令结构的层次和Netconf报文的xml层次也都是按照业务逻辑层次来配置实现的。 2. 从内容上分析Netconf报文的每一层都是按照“<参数名称>参数值or内层内容</参数名称>”这个形式去构建内容的。那么从内容上去理解具体怎么从Netconf报文转化到CLI命令行,实际上也就是从内容上理解,Netconf报文的某些层次具体在配置什么样的内容。下面提供两种方法思路。请注意,这两种方法不是非A即B,而是相辅相成的。 方法一:从<参数名称>的角度理解业务。(推荐先用方法一)我们通过上文中给出的L3VPN的例子,发现很多时候,netconf报文中<>内的参数名称其实与业务配置含义或者说命令行的指令名称是十分相近或者说基本一致的。下面给出几个例子: Netconf报文配置业务类型/具体配置<ifm>……</ifm>接口配置<instance>……</instance>实例配置<interface>……</interface>进入视图<ipv4>  <address>……</address><ipv4>配置ipv4地址 但例如“<af>……</af>”这种报文,从参数名称就很难看出在配置什么业务,这种情况,就需要用到方法二了。 方法二:针对无法从<参数名称>看出配置的业务是什么的情况,我们可以通过看“<参数名称>参数值or内层内容</参数名称>”中的“参数值”和整体结构来判断这几层报文在配置什么业务。看下面一个例子:Netconf报文配置业务类型/具体配置<afs> <af>   <type>ipv4uni</type>   …… </af></afs>通过<af></af>内层内容和参数值:<type>ipv4uni</type>,可以推测出是在配置ipv4地址族相关内容。 3. 看到Netconf报文之后,按照以上两种方式分析,基本上就可以梳理出下发的Netconf报文在配置什么业务,那么相应的命令行根据产品手册也就可以查出来了。  最后我们来看一下Netconf报文中一些前文未提到的部分。(对Netconf报文解释的补充)1. 关于urn:huawei:yang:XXX。例如:<ifm xmlns="urn:huawei:yang:huawei-ifm">表示本层报文其实是根据名为huawei-ifm.yang这个设备yang模型转化而来的。内层的所有配置报文都可以在此设备yang模型中追溯到。2. 关于operation=“XXX”。<instance xmlns:ns0="urn:ietf:params:xml:ns:netconf:base:1.0" ns0:operation="merge">用来给配置数据指定操作类型。如果未携带“operation”属性,则默认为merge操作。Operation取值如下:merge:在数据库中修改存在或不存在的目标数据,如果目标数据不存在则创建,如果目标数据存在则修改。这是默认操作。create:当且仅当配置数据库中不存在待创建的配置数据时,才能成功添加到配置数据库。如果配置数据存在,则会返回,其中包含一个值“data-exists”。delete:删除配置数据库中指定的配置数据记录。如果数据存在,则删除该数据,如果数据不存在,则返回,其中包含一个值“data-missing”。
  • [技术干货] 路由与交换IPsec VPN 笔记
    • • 随着网络安全需求的日益提升,而传统的TCP/IP协议缺乏有效的安全认证和保密机制(不加密,明文),所以我们要保证数据的安全性,因此IPsec就是一种开放的安全框架,可以用来保证IP数据报文在网络上传输的机密性,完整性和防重放。   IPsec:Internet Protocol Security • 源于IPv6 • IETF制定的一套安全保密性能框架 • 建立在网络层的安全保障机制 • 引入多种加密算法,验证算法和密钥管理机制 • 也具有配置复杂,消耗运算资源较多且增加延迟,不支持组播等缺点 • IPsecVPN是利用IPsec隧道建立的VPN技术(IPsec也是有隧道技术的,没有隧道根本不能成为一种合格的VPN技术) •   IPsec核心功能: • • 术语 备注 机密性 对数据进行加密,确保在传输时不被泄露给非授权用户。 完整性 保障数据在传输时,不被非授权用户进行篡改。 真实性 验证数据源,以确保数据来自真实的发送者。(IP报文头部内的源地址)  在数通领域,并不牵扯到用证书来做验证,这里使用数据包的源地址就行。 防重放 防止恶意用户通过重复发送捕获到的数据包所进行攻击,即接收方会拒绝旧的或重复的数据包。 • IPsec在发送报文时会有哪些比较关键的步骤,以下图实例就是告诉我们是如何实现的 •    IPsec技术框架: •  • • DES和3DES加密算法存在安全隐患,建议优先使用AES,SM1或SM4算法。 • MD5和SHA1验证算法存在安全隐患,建议优先使用,SHA2或SM3算法。 • 还是要看两端设备支持那种算法,如果都支持,那么尽量使用更安全的算法。 • • 通过AH和ESP这两个安全协议来实现IP数据报文的安全传输。 • IKE协议提供密钥协商,建立和维护安全联盟SA等服务。 • IKE是一种协商的方法,或者标准,SA通俗的叫安全联盟,当协商完成就可以进行实际的封装和传递,这里使用的保护就是AH和ESP了。 这里推荐使用ESP,建议使用ESP,ESP有加密,AH没有加密但有其他特性。协商要保证安全有加密,传递数据要安全也有加密。 • • IKE协商:协商验证算法,加密算法。 • 密钥管理:算法要使用密钥,所以需要密钥管理技术,进行自动协商或者手动,然后分发。 • 数据包为什么要进行协商和加密验证,就是出于我们的安全策略。 • 策略包含了这些东西,最终这些都会关联到策略,然后再到接口进行调用,整套完成下来,会发现他是一个模块化的东西,如果要进行修改只需要修改对应的模块,至于实际的封装是AH和ESP。   IPsec安全协议: • • AH:报文头验证协议,提供完整性,真实性,防重放等特性,但是AH并不进行数据加密,协议号为51。 • ESP:封装安全载荷协议,提供完整性,真实性,防重放,且提供数据加密,但是校验不包括IP报头,协议号为50. • 安全特性 AH ESP 协议号 51 50 数据完整性校验 支持 支持 数据加密 不支持 支持 防报文重放攻击 支持 支持 NAT穿越 不支持 支持   IPsec封装模式:两种模式,四种数据报文格式。 • • 传输模式和隧道模式是对立的,隧道是加新报头,传输是不加。 • 传输模式:在原始IP报头后面加入IPsec报头(ESP或AH报头)。 • 隧道模式:在原始IP报头前面加入IPsec报头(ESP或AH报头),另外再生成一个新IP报头放到IPsec报头前面。 • 安全性:隧道模式隐藏原IP报头,安全性更高。 • 性能:隧道模式有一个新的IP报头,所以传输模式比隧道模式更占用带宽。 •  • 传输模式封装结构 • AH:整个IP层往后都会做验证。 • ESP:ESP头部和尾部做验证,加密除ESP字段外到ESP尾部数据。注:为什么不加密IP头部,加密了设备无法读取到数据。 •  • 隧道模式封装结构 •  • 两个设备直接做的数据协商和加密,没有新的IP报头,负责发送数据同时也负责加密和验证。 •  • 传输点不是加密点,也就是说出口设备进行协商和加密,实际传输数据是其他设备。 •    安全联盟:SA (Security Association) • 顾名思义,通信双方结成盟友,相互信任,即达成约定。 • SA由一个(SPI,IP目的地址,安全协议号(AH,ESP))三元组唯一标识。 • 决定了对报文进行何种处理:模式,协议,算法,密钥。生存周期等。 • 每个IPsec SA都是单向的。 • SA可以手工建立或者IKE协商生成。 • SPD(Security Policy Database)安全策略数据库 • SAD(Security Association Datebase)安全联盟数据库 • 术语 备注 Negotiate 协商,两个节点要开始安全发送数据之前,必须要做的事情。(动态协商) SA Security Association 安全联盟,协商的结果,类似合约书。 SPI Security Parameter index 安全参数索引,SA内包含,用于区分多个SA。 IKE Internet Key Exchange 因特网密钥交换,SA协商的方法和标准。 • 两端设备先进行协商, 协商完毕后会有SA,SA包含了SPI,IKE和IPsec参数,协商的方法是使用IKE或者手动。 •  • • • 对比项 手工建立 IKE协商 密钥生成 手工配置 DH算法 密钥刷新 手工配置 动态刷新 生成周期 永久 可配置 适用环境 小型网络环境 中大型网络环境    IKE:Intelnet Key Exchange,因特网密钥交换 • 建立在ISAKMP(Intelnet安全联盟和密钥管理协议)定义的框架上。 • 基于UDP(端口号500)的应用层协议,可为数据加密提供所需的密钥。 • 使用DH算法,在不安全的网络上安全的分发密钥,验证身份。 • 定时更新SA和密钥,实现完善的前向安全性(PFS)。 • 允许IPsec提供防重放服务(加入随机数)。 • 简化IPsec的使用和管理,大大简化了IPsec的配置和维护工作。 • • IPsec会有两次SA协商,IKE SA协商主要是保证数据通道,通道里面传输加密数据使用IPsecSA来进行协商。 • IKE有分版本v1和v2,模式分主模式和野蛮模式。 • 首先会有IKE的协商,先有IKE协商出来的SA,然后再协商IPsecSA出来。这个过程有两个阶段。 • 阶段 备注 阶段 1 Phase 1 在网络上建立一个IKE SA ,为阶段2协商通过保护 分主模式(Main mode)和野蛮模式(Affressive mode) 阶段2 Phase 2 在阶段1 IKE SA 的保护下完成IPsec SA的协商 快速模式(Quick mode) • 两端之间建立一个IKE SA完成身份验证和密钥信息交换后,在IKE SA的保护下, 根据配置的AH/ESP安全协议等参数协商出一对IPsecSA。  • IKE协商模式 • 主模式:6个数据包,3个阶段(安全提议,生成密钥,验证身份(加密)) • 野蛮模式:3个数据包,1个阶段(三个阶段合并为一个,然后验证) •  •  •   • IPsecSA协商: • 快速模式:3个数据包(全部加密)发送IPsec安全提议,身份和数据验证,互相交换,然后验证。 •   • 总结 • IKE SA和IPsec SA是两种不同的SA。 • IKE SA:认证算法,加密算法,认证方法(预共享密钥/证书),生命周期 • IPsec SA:安全协议(ESP/AH),模式(传输/隧道),加密算法,生命周期 •    IPSecVPN配置: • • IPsec流程图 • 配置好以下拓扑,从a发送到b的感兴趣流,会从出口hq和branch进行协商sa,协商有两个阶段,IKE SA和IPsec SA,交换安全策略信息后,建立SA,完成IPsec隧道。 •  • 命令 备注 Ipsec proposal x 创建IPsec安全提议 x=提议名称 Encapsulation tunnel/transport 配置封装模式 隧道/传输 Transform esp/ah/esp-ah 配置隧道协议 esp/ah/esp-ah Esp encryption-algorithm x 配置esp协议使用加密算法 x=算法 Esp/an authentication-algorithm x 配置esp/ah协议使用认证算法 x=算法 Dis ipsec proposal / name x 查看IPsec安全提议状态配置  IPsec安全提议 Ipsec policy x id manual 创建IPsec策略 x=策略名称 id=序列号 manual=手动   Security acl x 配置引用的acl Proposal x 配置引用的安全提议 Tunnel local x 配置隧道口源地址 Tunnel remote x 配置隧道口目的地址 Sa spi inbound/outbound esp/ah x 配置SA的spi 出入双方都需要对应 x=spi Sa string-key inbound/outbound esp/ah cipher x 配置SA的key 出入双方都需要对应 x=密钥 Dis ipsec policy /name x 查看ipsec策略状态配置  IPsec手动安全策略 Ike proposal x 创建ike安全提议 x=序列号 authentication-method pre-share/rsa-signature/digital-envelope 配置认证方式 psk/证书/数字信封 authentication-algorithm x 配置认证算法 x=算法 encryption-algorithm x 配置加密算法 x算法 Dh group x 配置dh组  x=组 Sa duration x 配置sa超时时间 Dis ike proposal  /number x 查看ike安全提议信息 x=序列号  IKE安全提议 Ike peer x v1/v2 创建ike对等体  版本v1/v2 Exchange-mode main/aggressive 配置对等体模式 模式/主模式/野蛮 Pre-shared-key cipher x 配置psk密钥 Ike proposal x 配置引用ike安全提议 local-address x 配置对等体 源地址 Remote-address x 配置对等体 目的地址  IKE对等体 IPSec policy x id isakmp  创建IPSec策略 isakmp=自动  Proposal x 配置引用IPSec安全提议 Ike-peer x 配置引用ike对等体 Security x 配置引用acl  ike协商安全策略 Dis ipsec statistics esp/an 查看接口流量统计 Dis ike/ipsec sa /brief/duration 查看sa安全联盟 b=简明信息 dur=生存时间  查看IPSec/ike sa • 手动设置sa没有时间限制。 • sa两端之间生存时间不一致,按照小的计算。 • 需要走IPsecVPN隧道的流量需要在NAT中做排除,没有排除等同流量往公网走,那么就出问题了。   IPsec协商配置流程图: • •