授权DNS服务器可以根据递归DNS服务器发送的EDNS Client Subnet(ECS)中的值,返回不同的结果。如果客户端是通过内网IP向递归DNS服务器发起查询的,而且递归DNS服务器发出的递归查询使用的公网IP跟客户端使用的公网IP不是一个地区时,就无法给客户端提供一个最优的解析结果了。 PowerDNS Recurse 4.2增加了一个设置“ecs-add-for”,可以指定哪些subnet允许作为ECS的值,对于不允许作为ECS值的subnet,将会取ecs-scope-zero-address的值作为ECS的值。所以通过这两个设置可以为内网客户端设定一个默认的ECS值。 配置文件 […]
Category: 服务器
Linux or Windows Server
Nginx ssl_preread传递客户端IP
ssl_preread是基于L4的反代方案,TLS SNI握手时客户端会提供域名,所以可以让Nginx在无需完成TLS握手的情况下,就根据域名进行后端服务器的选择。简单来讲,你只需要给后端服务器配置一个SSL证书,而提供反代功能的Nginx则无需配置。文档见此:http://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.html 因为这是L4反代,所以通过“proxy_set_header”传递客户端IP的方法是行不通的。其实传递客户端IP的解决办法跟上一篇文章类似:L4(传输层)IP透明反向代理的实现(传递客户端真实IP),ng […]
L4(传输层)IP透明反向代理的实现(传递客户端真实IP)
这种需求,一般来说,会在应用层加个标记标明客户端的IP,例如说HTTP,就是添加个请求头的事情。但并不是所有服务器程序、协议你都能这样下手。所以能不能在不对协议和服务器程序本身做任何改动的情况下,传递客户端的IP呢? 最直接的方法应该就是,把L3的源IP改掉,没对协议进行任何改动,对上层完全透明。先来看看改了L3的source IP会出现什么问题: 上图中的A是个L4负载均衡,Router会把来自Internet的客户端请求转发给A,A再根据策略转发到B、C或D。 假设这时A选择了B,A把请求转发给B时,把L3的源IP改成了客户端的IP,那B收到数据包后,根据B系统上的路由表,回复的包会直接经 […]
双路超线程物理服务器的QEMU CPU affinity调整
首先运行 virsh capabilities 查看物理机物理核心及其线程与逻辑处理器(线程)的关系:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
... <topology> <cells num='1'> <cell id='0'> <memory unit='KiB'>24671680</memory> <pages unit='KiB' size='4'>6167920</pages> <pages unit='KiB' size='2048'>0</pages> <distances> <sibling id='0' value='10'/> </distances> <cpus num='16'> <cpu id='0' socket_id='0' core_id='0' siblings='0,8'/> <cpu id='1' socket_id='0' core_id='1' siblings='1,9'/> <cpu id='2' socket_id='0' core_id='2' siblings='2,10'/> <cpu id='3' socket_id='0' core_id='3' siblings='3,11'/> <cpu id='4' socket_id='1' core_id='0' siblings='4,12'/> <cpu id='5' socket_id='1' core_id='1' siblings='5,13'/> <cpu id='6' socket_id='1' core_id='2' siblings='6,14'/> <cpu id='7' socket_id='1' core_id='3' siblings='7,15'/> <cpu id='8' socket_id='0' core_id='0' siblings='0,8'/> <cpu id='9' socket_id='0' core_id='1' siblings='1,9'/> <cpu id='10' socket_id='0' core_id='2' siblings='2,10'/> <cpu id='11' socket_id='0' core_id='3' siblings='3,11'/> <cpu id='12' socket_id='1' core_id='0' siblings='4,12'/> <cpu id='13' socket_id='1' core_id='1' siblings='5,13'/> <cpu id='14' socket_id='1' core_id='2' siblings='6,14'/> <cpu id='15' socket_id='1' core_id='3' siblings='7,15'/> </cpus> </cell> </cells> </topology> <cache> <bank id='0' level='3' type='both' size='8' unit='MiB' cpus='0-3,8-11'/> <bank id='1' level='3' type='both' size='8' unit='MiB' cpus='4-7,12-15'/> </cache> ... |
其中的socket_id代表CPU的槽位,core_id代表CPU物理核心,siblings表示哪些逻辑处理器(线程)是属于同一个物理核心的。 例如id为0以及8的逻辑处理器,都属于同一个CPU槽位且属于同一个物理核心。 在这台物理机上建立的虚拟机,想得到最佳的性能,首先不要跨CPU插槽,其次,不要让多个虚拟机CPU共享同一个物理核心。 根据上面的信息,4核心8线程的虚拟机CPU亲和度配置如下: [crayon-67581e2 […]
一款鲜为人知的杰出VPN方案 —— ACCEL-PPP
因PPTP简单、方便,无特别需要,平时需要用到VPN时一般都会首选PPTP。 数月前使用PPTP的过程中发现,Linux下的PoPToP方案极限速率仅有20 Mbps左右,而Windows下“网络策略和访问服务”提供的PPTP上限速率则高些,能达到70 – 80 Mbps。 当时了解到一款名为ACCEL-PPP的方案,尝试了一番,效果不负其名——ACCEL。 但今天发现,此方案的中文介绍、资料近乎无(英文介绍也不多),遂撰写此文,欲让更多人了解到此杰作。 服务器配置: CPU: Intel Xeon L5520 *2 RAM: 48GB 网络适配器: Intel 千兆 […]