分类 网络 下的文章

ikev2配合radius和ldap认证vpn服务器搭建,适合iphone,macos

ikev2的vpn是苹果系统默认推荐的方式,不需要下载客户端,企业用户配合ldap账号管理很方便。
以下方法基于ubuntu16.04系统,使用脚本https://quericy.me/blog/699/

20180823提醒一下,strongswan不支持野卡(通配符域名证书),需要使用具体的域名证书。
参考https://tools.ietf.org/html/rfc6125#section-7.2

20180524添加我改写的一键安装脚本https://github.com/trepwq/ikev2-radius-ldap/raw/master/install-ikev2-radius-ldap.sh
以下为原作者脚本安装步骤

首先申请域名证书,可以用阿里云免费的单域名证书,申请下来后证书里第一部分是域名证书,写入server.cert.pem;第二部分是ca证书,写入ca.cert.pem ,另一个key文件修改为server.pem,把这三个文件放到quericy脚本的相同目录里。
然后按照提示一步一步来,需要注意的是我开启了snat,其他为默认。如果网卡ip地址是内网ip,就输入内网ip,然后在路由器端把500和4500端口的udp转发给这个内网ip就可以了。
脚本安装完之后修改配置文件/usr/local/etc/ipsec.conf, 把里面的rightauth=eap-mschapv2修改为rightauth=eap-radius,然后在/usr/local/etc/strongswan.d/charon/eap-radius.conf 的servers段添加服务器地址和密码

servers {
        server_synology {
                        address = 192.168.1.1
                        secret = secret
                        }
}

我这里使用了群晖的radius-server。
最后重启ipsec restart。ps,ipsec reload对很多修改不起作用。
最最后添加ipsec开机启动

root@ubuntu:~# cat /etc/rc.local 
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/usr/local/sbin/ipsec start


exit 0

由于使用了域名证书,根证书在苹果系统里是已经存在的,所以不需要导入证书,直接输入用户名密码即可。

使用ping测试路径里设备的mtu

使用ping测试路径里设备的mtu,mac ping -s 1472 -D 192.168.1.1,linux ping -s 1472 -M do 192.168.1.1,windows ping -f -l 1472 192.168.1.1,如果不通则mtu小于1500
1472是ping数据大小,要加上icmp控制8字节和20字节的ip包头,等于1500字节。

MTU 到底是怎么来的
MTU, 是 Maximum Transmission Unit 的缩写, 根据 Wikipedia 的定义, MTU 指的是在 Network Layer (因处 OSI 第三层, 后以 L3 代替)上传输的最大数据报单元, 而 MTU 的大小一般由 Link Layer (因处 OSI 第二层, 后以 L2 代替) 设备决定. 比如生活中使用最广泛的以太网(Ethernet, IEEE 802.3)的帧大小是 1518 字节, 根据 Ethernet Frame 的定义, L2 Frame 由 14 字节 Header 和 4 字节 Trailer 组成, 所以 L3 层(也就是 IP 层)最多只能填充 1500 字节大小, 这就是 MTU 的由来.

802.3 Ethernet MTU
Dest MAC(6)Src MAC(6)Eth Type/Len(2)PayloadCRC Trailer(4)

所以说, 当使用 Ethernet 介质时确定只能传最大 1518 字节的帧后, 减去 18 字节的 L2 头和尾, 留给 IP 层的就只有 1500 字节了.

PS: 标准文档中中所说的 LLC 层因为在实际应用中基本不存在, 所以 802.3 标准 MTU 是 1492, 但是实际使用中的 MTU 是 1500.

L2, L3 示意图
IP Layer(1500)
Link Layer(1518)

PPPoE MTU
另一个典型的 MTU 是拨号上网( PPPoE )的 1492 字节, 通过以太网接入的 PPPoE 的封包结构上会在 L2 和 L3 之间插入两层, 一层 PPP 协议和一层 PPPoE 协议. 但是因为传输的底层仍然使用的是以太网, 所以上层包大小仍然受 L2 大小限制. MTU 这样算, Link Layer 长 1518 字节, 所以 PPPoE Layer 最长 1500 字节, 然后 PPPoE 头占用 6 字节, PPP 头占用 2 字节, 所以留给 IP 层的最大空间就剩下了 1492 字节:

IP Layer(1492)
PPP Layer(1494)
PPPoE Layer(1500)
Link Layer(1518)

VLAN(802.1Q) MTU
VLAN (IEEE 802.1Q) 的实现是在 L2 头部扩展了一个 4 字节大小的字段, 分别是 2 字节协议识别码(TPID)和 2 字节的控制信息(TCI), 这导致了 L2 的头和尾加起来的长度变成了 22 字节, 所以 L3 的 MTU 就被压缩到了 1496 字节:

IP Layer(1496)
Link Layer(1518)

然而在 802.3ac 标准之后的以太网帧大小则扩展到了 1522 字节, 也就是说在这个标准下的 Ethernet, MTU 也可以设定成 1500 字节了.

IP Layer(1500)
Link Layer(1522)

TCP MSS
MSS (Maximum Segment Size)是 TCP Layer (L4) 的属性, MSS 指的是 TCP payload 的长度. 当在 MTU 1500 的网络上传输时, MSS 为 1460 (即 1500 减去 20 字节 IP 头, 20 字节 TCP 头).

为什么 L3 有 MTU 后 L4 还要 MSS 呢?
MTU 和 MSS 的功能其实基本一致, 都可以根据对应的包大小进行分片, 但实现的效果却不太一样.

L3 (IP) 提供的是一个不可靠的传输方式, 如果任何一个包在传输的过程中丢失了, L3 是无法发现的, 需要靠上层应用来保证. 就是说如果一个大 IP 包分片后传输, 丢了任何一个部分都无法组合出完整的 IP 包, 即是上层应用发现了传输失败, 也无法做到仅重传丢失的分片, 只能把 IP 包整个重传. 那 IP 包越大的话重传的代价也就越高.

L4 (TCP) 提供的是一个可靠的传输方式, 与 L3 不同的是, TCP 自身实现了重传机制, 丢了任何一片数据报都能单独重传, 所以 TCP 为了高效传输, 是需要极力避免被 L3 分片的, 所以就有了 MSS 标志, 并且 MSS 的值就是根据 MTU 计算得出, 既避免了 L3 上的分片, 又保证的最大的传输效率.

routeros配置vpn分流大陆ip

20201203更新:Routeros V7的分流方法参考Routeros V7配置策略路由
20201202更新:Routeros V7连接境外服务器的vpn方式可以参考Routeros 配置WireGuard
20200503更新:添加dnsmasq白名单分流解析
20200416更新:添加使用ipip.net的大陆ip列表生成命令并添加了私有ip地址

ros使用pppoe连网,ros上配置vpn连接香港服务器上的ros。目标:内网需要翻墙的ip通过大陆ip列表分流,大陆ip走默认路由,境外ip走vpn。其他内网ip全部走默认路由。
首先下载大陆ip列表,推荐方法2
方法1:

curl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > chnroute.txt

生成的txt文件使用sublime的多行编辑功能或其他方式转换成ros的cn-ip.rsc脚本格式。

/ip firewall address-list
add list=cn-ip address=1.0.1.0/24
add list=cn-ip address=1.0.2.0/23
。。。

方法2:使用ipip.net发布在github的大陆ip列表生成

curl -s https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt |sed -e 's/^/add address=/g' -e 's/$/ list=CNIP/g'|sed -e $'1i\\\n/ip firewall address-list' -e $'1i\\\nremove [/ip firewall address-list find list=CNIP]' -e $'1i\\\nadd address=10.0.0.0/8 list=CNIP comment=private-network' -e $'1i\\\nadd address=172.16.0.0/12 list=CNIP comment=private-network' -e $'1i\\\nadd address=192.168.0.0/16 list=CNIP comment=private-network'>cnip.rsc

以上脚本在CNIP列表里添加了私有ip地址192.168.0.0/16,172.16.0.0/12和10.0.0.0/8

方法3:下载别人制作好的脚本
http://www.iwik.org/ipcountry/mikrotik/CN

使用import cnip.rsc导入ros。添加内网需要翻墙的ip列表。
配置ip firewall的mangle
prerouting,source address list,destination address list取反,destination address type,address type local,invert,mark routing,cross-gfw。
配置ip routes的网关
0.0.0.0/0,gateway设置为vpn对端地址,routing mark 使用上面的cross-gfw。

现在解决dns问题,由于ros的dns功能比较弱,这里使用dnsmasq
内网一台linux系统,可以是虚拟机,可以是容器,安装dnsmasq。配置dnsmasq的源dns为google dns,然后使用github上的大陆网址白名单生成脚本添加需要使用大陆解析的域名。https://github.com/felixonmars/dnsmasq-china-list
具体方法参考使用dnsmasq基于大陆域名白名单分流解析域名

万兆电口交换机推荐

2019年5月更新
ubnt的万兆poe交换机unifi xg-6poe 开箱测试链接

2017年12月能买到的万兆电口交换机对比推荐
推荐网件的xs716t,16口+2共享sfp+,噪音27db,价格7k,不在乎噪音可以上xs728t,24电口+4独立sfp+,噪音45db。15k左右。
再差一点就是gs110emx,8口千兆,2口万兆电口,简单网管,可配置链路聚,国行价格2.5k,gs110mx是不带管理的傻瓜交换机,跟华硕的XG-U2008类似,价格不到2k。

爱快使用openvpn连接总部和分支机构

先写个坑:设置服务端静态路由后客户端要重新拨号才能生效
分支机构访问总部,可以有两种路由方式,服务端推送路由,客户端自己添加路由
总部访问分支机构,设定客户端为固定ip,服务端设置静态路由,客户端需要重新连接一下静态路由才会生效。