跳转至

笔记

IPCC Preliminary SLIC Optimization 2

chivier advise on IPCC amd_256

技术路线 描述 时间 加速比 备注
Baseline 串行程序 21872 ms 1
核心循环openmp 未指定 8079ms
核心循环openmp 单节点64核 7690ms 2.84
换intel的ipcp 基于上一步 3071 ms 7.12
-xHOST 其余不行,基于上一步 4012ms
-O3 基于上一步 3593ms

node5

Intel(R) Xeon(R) Platinum 8153 CPU @ 2.00GHz

技术路线 描述 时间 加速比 备注
Baseline 串行程序 29240 ms 1
核心循环openmp 未指定(htop看出64核) 12244 ms
去除无用计算+两个numk的for循环 080501 11953 ms 10054 ms
计算融合(去除inv) 080502 15702 ms 14923 ms 15438 ms 11987 ms
maxlab openmp 基于第三行080503 13872 ms 11716 ms
循环展开?? 14436 ms 14232 ms 15680 ms

-xCOMMON-AVX512 not supports

Please verify that both the operating system and the processor support Intel(R) X87, CMOV, MMX, FXSAVE, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, MOVBE, POPCNT, AVX, F16C, FMA, BMI, LZCNT, AVX2, AVX512F, ADX and AVX512CD instructions.
-xCORE-AVX2
Please verify that both the operating system and the processor support Intel(R) X87, CMOV, MMX, FXSAVE, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, MOVBE, POPCNT, AVX, F16C, FMA, BMI, LZCNT and AVX2 instructions
没有 FXSAVE,BMI,LZCNT 有BMI1,BMI2

使用-xAVX,或者-xHOST 来选择可用的最先进指令集

Please verify that both the operating system and the processor support Intel(R) X87, CMOV, MMX, FXSAVE, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, POPCNT and AVX instructions.

-fast bugs

ld: cannot find -lstdc++
ld: cannot find -lstdc++
/public1/soft/intel/2020u4/compilers_and_libraries_2020.4.304/linux/compiler/lib/intel64_lin/libiomp5.a(ompt-general.o): In function `ompt_pre_init':
(.text+0x2281): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/var/spool/slurm/d/job437118/slurm_script: line 23: ./SLIC_slurm_intel_o3: No such file or directory

AMD EPYC 7~~2

icpc -Ofast -march=core-avx2 -ipo -mdynamic-no-pic -unroll-aggressive -no-prec-div -fp-mode fast=2 -funroll-all-loops -falign-loops -fma -ftz -fomit-frame-pointer -std=c++11 -qopenmp SLIC_openmp.cpp -o SLIC_slurm_intel_o3

后续优化

基于核心的openmp并行

去除无用计算

delete all maxxy
if(maxxy[klabels[i]] < distxy[i]) maxxy[klabels[i]] = distxy[i];

计算融合(减少访存次数)

  1. 将inv去除(效果存疑)
  2. maxlab openmp并行(由于不是计算密集的,是不是要循环展开)

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

WebCrawler first try

常见的仿站软件尝试

  1. wget -c -r -np -k -L -p 递归下载
  2. webCopy
  3. WinHTTrack
  4. Octoparse
  5. Teleport pro

遇到的问题

尝试后下载了一些html\css\js文件。但是没有达到我的要求。

我猜测的爬取原理,根据网站返回的index.html以及文件里指向的新文件路径进行递归下载。

这样的问题有:

  1. 无法对json文件里指向的材质包路径进行递归下载
  2. 无法读取指定网站文件夹的目录,导致不知道文件夹里有什么文件
  3. 假如有ftp://可能可以

需要进一步的研究学习

  1. 通过python实现对json文件里指向的材质包路径进行递归下载(感觉只能半自动)
  2. 读取指定网站文件夹的目录

开题缘由、总结、反思、吐槽~~

在找live2d模型的时候找到了 https://github.com/Eikanya/Live2d-model ,然后其中有个HSO的demo网站https://l2d.alg-wiki.com/。

然后一开始我想在自己页面做一个仿站,后来了解后只想把他里面的live2d的材质数据、贴图等爬下来。但是遇到了几个问题。

参考文献

https://www.shuzhiduo.com/A/E35pV9EAzv/

python crawler

IPCC Preliminary SLIC Optimization 1

第一部分优化

从数据重用(不重复计算,降低计算量)、计算融合(减少访存次数)、循环重组、改变数据结构入手

数据重用

主体变量数据依赖梳理

一开始所有的RGB颜色在ubuff里,klabel存分类结果

首先经过转换,将ubuff的RGB转换为lvec avec bvec三个double[sz]数组 存在私有变量m_lvec m_avec m_bvec,供class内访问

优化建议:lab三种颜色存在一起,访问缓存连续

DoRGBtoLABConversion(ubuff, m_lvec, m_avec, m_bvec);

计算冗余一:

计算出的全体edges,只有一部分在后面一个地方用了196个中心以及周围8个节点。

优化建议:要用edges时再计算(保证了去除不必要计算和计算融合)

优化建议:kseedsl/a/b/x/y 分别用5个vector存是不好的,每个中心的5元组要存在一起,因为访问和修改都是一起的。

优化建议: 1. 核心计算,是不是要拆开? 2. 除以maxlab[n],改成乘1/maxlab[n] 3. maxxy没有用,可以除去定义与数组维护(line 429) 4. disxy[i]也就可以不用数组

优化建议: 1. if判断用掩码 2. 想将与每个像素i有关的属性放在一起,但是distvec要全部初始化。那我维护char*的passcheck数组判断是否已经遍历?未遍历直接赋值,已经遍历,比较后判断是否赋值。 3. 对于2和并行化这个部分的问题:1.按照中心划分,存储每个点的距不同中心的距离,最后归约取最小。2. 并行还是按照坐标划分,判断在哪几个区域内,然后计算距离最小的)

优化建议: 1. 对于求和部分labxy与1/clustersize??存在一起 2. 这部分按坐标并行时,归约的是196个元素的最小值或者求和

vector 连续性

vector中的元素在内存中是连续存储的.

vector的实现是由一个动态数组构成. 当空间不够的时候, 采用类似于C语言的realloc函数重新分配空间. 正是因为vector中的元素是连续存储的, 所以vector支持常数时间内完成元素的随机访问. vector中的iterator属于Random Access Iterator.

cache缓存原理疑问

每级cache难道只存读取数据周围的所有地址数据吗?还是一块一块读的。

假如调度是一块一块读取的而且cache足够大存下时,对于m_lvec m_avec m_bvec,假如各读取同一块,会导致和将其存储在一起是一样的效果。对于m_lvec[i]的下一个元素m_lvec[i+1],m_avec[i+1],m_bvec[i+1]也在cache中。

chivier 建议

#pragma omp parallel for collapse(2)
icpc -xCOMMON-AVX512 -O3 -std=c++11 -qopenmp SLIC.cpp -o SLIC
g++ -fopenmp
先openMP优化,然后MPI一分为二
数据结构没有必要改,不会访存连续
minicoda for tmux zsh htop gcc9

pip install gdbgui to localhost

gdb tui enable

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

ZEN2

Zen 2 使用所谓的 TAGE 分支预测器,它比其前身具有更深的分支历史。这通过比 Zen (+) 更大的分支目标缓冲区 (BTB) 得到增强,L1 BTB(512 个条目)增加了一倍,L2 BTB 几乎增加了一倍(现在为 7K)。随着 MOP 缓存增长到 4K,更大更好的主题仍在继续。这特别方便,因为没有处理器想要多次解码微操作。将它们解码一次并将它们放入大(r)缓存中可以加快速度并使处理器更高效。

有趣的是,在分析了大量应用程序及其数据集大小后,指令缓存实际上从 64KB 下降到 32KB,但关联性从 4 路增加到 8 路。原因是,根据 Mike Clark 的说法,这种减少几乎不会降低性能:无论如何,大多数数据集都需要超过 64KB。新的缓存还具有改进的预取和更好的利用率。

这一切意味着 Zen 2 的前端更高效——有助于 IPC——但确实以占用更多空间为代价。

Zen 2 微架构的简化图

单个核心

参考文献

https://hexus.net/tech/news/cpu/131549-the-architecture-behind-amds-zen-2-ryzen-3000-cpus/

https://en.wikichip.org/wiki/amd/microarchitectures/zen_2

Openmpi MPIOPT

# 华为ARM
MPIOPT="-mca pml ucx --mca btl ^vader,tcp,openib,uct -x UCX_NET_DEVICES=mlx5_0:1"
mpirun -np 4 $MPIOPT ./prob1

mpirun参数

root用户需要加–allow-run-as-root 参数1 参数2

-x \

  1. 在执行程序之前将指定的环境变量导出到远程节点。
  2. 每个 -x 选项只能指定一个环境变量。 可以指定现有环境变量或使用相应值指定新变量名称。 例如:
    % mpirun -x DISPLAY -x OFILE=/tmp/out ...
    
  3. 建议用户在环境中设置变量,然后使用 -x 导出(非定义)它们。

MCA 组件

设置 MCA(Modular Component Architecture ) 参数

-mca 开关允许将参数传递给各种 MCA(模块化组件架构)模块。 MCA 模块对 MPI 程序有直接影响,因为它们允许在运行时设置可调参数(例如使用哪个 BTL 通信设备驱动程序,向该 BTL 传递什么参数等)。

-mca 开关接受两个参数:\ 和 \。 \ 参数通常指定哪个 MCA 模块将接收该值。例如,\ "btl" 用于选择用于传输 MPI 消息的 BTL。 \ 参数是传递的值。

mpirun -mca btl tcp,self -np 1 foo
告诉 Open MPI 使用“tcp”和“self”BTL,并运行一个已分配的“foo”节点。

可以多次使用以指定不同的 \ 和/或 \ 参数。如果多次指定相同的 \,则 \ 将用逗号 (",") 连接起来,将它们分隔开。

未知的\值不会报warning

MCA通过环境变量实现

OMPI_MCA_\=\

MCA通过指定包含相关选项的文件实现

-tune, --tune \

MCA设置的优先级

-mca选项会覆盖环境变量,也会覆盖默认文件

$OPAL_PREFIX/etc/openmpi/openmpi-mca-params.conf

或者$OPAL_PREFIX/etc/openmpi-mca-params.conf

或者$HOME/.openmpi/mca-params.conf

MCA 默认default值

https://stackoverflow.com/questions/36635061/how-to-check-which-mca-parameters-are-used-in-openmpi

set mpi_show_mca_params to all

MCA可用的组件-通过ompi_info

ompi_info指令

ompi_info - 显示有关 Open MPI 安装的信息 三种常见场景: 1. 检查本地配置并查看 Open MPI 是如何安装的。 2. 向 Open MPI 社区提交错误报告/帮助请求 3. 查看已安装的 Open MPI 插件列表并查询它们支持哪些 MCA 参数。 4. ompi_info --all 显示所有MCA选项,包括在某些环境变量值下才可用的隐藏选项

ompi_info查看使用情况

比如不清楚 --mca btl vader,可以运行 ompi_info --param btl vader --level 9

BTL

MPI point-to-point byte transfer layer, used for MPI

BTL 组件框架负责处理所有点对点消息传送,该层只是简单地移动字节序列,不考虑上层点对点通信协议,包含了一组用于发送/接收或RDMA 的通信组件单元。BTL 不受 MPI 语义的影响,它仅仅是通过最基本的传递功能来在进程间进行数据交换(包括连续的和非连续的数据)。这样的组件框架为网络设备的开发商提供了便利,同时也可以支持更广泛的结点间通信设备。

^号与...符号

btl 参数的值是一个由逗号分隔的组件列表,带有可选的前缀 ^(插入符号)来表示排除之后的组件。

% mpirun --mca framework comp1, comp2 ^comp3 # ^comp3前注意没有,号
在此示例中,组件 comp1 和 comp2 包含在 --mca 框架指定的框架中。组件 comp3 被排除在外,因为它前面有 ^(插入符号)符号。
% mpirun --mca framework ^comp3,comp1
因为,号的原因是一个整体,所以是排除comp3,comp1两项

例如,以下命令从 BTL 框架中排除 tcp 和 openib 组件,并隐式包含所有其他组件

% mpirun --mca btl ^tcp,openib ... # ...是rest的意思
在命令中使用插入符号后跟省略号表示“对其余组件执行相反的操作”。 当 mpirun --mca 命令指定要排除的组件时,省略号后面的插入符号隐式包含该框架中的其余组件。 当 mpirun --mca 命令专门包含组件时,后面跟有省略号的表示“并排除未指定的组件”。

例如,以下命令仅包含 btl 的 self、sm 和 gm 组件,并隐式排除其余部分:

% mpirun --mca btl self,sm,gm ...

PML

MPI point-to-point management layer

PML 组件框架负责管理所有消息的传递,实现了 MPI 点点通信原语,包括标准、缓冲、准备和同步四种通信模式。PML 根据具体的调度策略对 MPI 消息进行调度,该策略是根据 BTL 的具体属性决定的。短消息传递协议和长消息传递协议也是在 PML 中实现的。所有控制信息(ACK/NACK/MATCH)也都由 PML 进行管理。这种结构的优点是将传输协议从底层互连中分离出来,显著的降低了代码的复杂度和冗余度,增强了可维护性。

需要进一步的研究学习

不使用btl??

遇到的问题

暂无

参考文献

https://docs.oracle.com/cd/E19923-01/820-6793-10/mca-params.html

https://www.open-mpi.org/faq/?category=openfabrics

http://blog.sysu.tech/MPI/OpenMPI/OpenMPI%E5%B8%B8%E7%94%A8%E6%8A%80%E5%B7%A7/

http://blog.sysu.tech/MPI/OpenMPI/OpenMPI%E5%B8%B8%E7%94%A8%E6%8A%80%E5%B7%A7/

https://blog.csdn.net/qq_15457239/article/details/49152209

IPCC Preliminary SLIC Analysis part4 : cluster environment

login node

id

[sca3173@ln121%bscc-a5 ~]$ id sca3173
do_ypcall: clnt_call: RPC: Remote system error
do_ypcall: clnt_call: RPC: Remote system error
uid=5804(sca3173) gid=5804(sca3173) groups=5804(sca3173),1518

cpu

Intel(R) Xeon(R) Silver 4208 CPU @ 2.10GHz

slurm

ON AVAIL  TIMELIMIT  NODES  STATE NODELIST 
amd_256      up   infinite      3 drain* fa[0512,0911],fb1111 
amd_256      up   infinite      1  down* fa0714 
amd_256      up   infinite      1   comp fb1106 
amd_256      up   infinite     16  drain fa[0109,0411,0414,0601,0608-0609,0810,1203],fb[0104,0110,0513,0908,1007,1208,1212,1216] 
amd_256      up   infinite    377  alloc fa[0101-0108,0110-0116,0201-0202,0204-0216,0301-0316,0401-0410,0412-0413,0415-0416,0501-0511,0513-0516,0602-0607,0610-0616,0701-0713,0715-0716,0801-0809,0811,0813-0816,0901-0910,0912-0916,1001-1016,1101-1116,1201-1202,1204-1216,1301-1316],fb[0101-0103,0105-0109,0111-0116,0201-0204,0207-0216,0301-0316,0401-0416,0501-0512,0514-0516,0601-0616,0702-0716,0803-0815,0901-0904,0906-0907,0909-0911,0913-0916,1001-1003,1010,1012-1014,1016,1101,1103-1105,1107-1110,1113-1115,1201-1207,1211,1213-1214,1302-1304,1309-1315],fc[0101-0105,0115,0205-0207,0209,0215] 

memery

[sca3173@ln121%bscc-a5 ~]$ cat /proc/meminfo
MemTotal:       196339948 kB = 187gB
MemFree:        89580888 kB = 85 gB
MemAvailable:   163166580 kB = 102 gB

architecture

[sca3173@ln121%bscc-a5 public1]$ lsb_release -d | awk -F"\t" '{print $2}'
CentOS Linux release 7.9.2009 (Core)

[sca3173@ln121%bscc-a5 public1]$ cat /proc/version
Linux version 3.10.0-1160.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020

GPU 集显

[sca3173@ln121%bscc-a5 public1]$  lshw -numeric -C display
WARNING: you should run this program as super-user.
  *-display                 
       description: VGA compatible controller
       product: Integrated Matrox G200eW3 Graphics Controller [102B:536]
       vendor: Matrox Electronics Systems Ltd. [102B]

disk

[sca3173@ln121%bscc-a5 public1]$ df -h /public1
Filesystem                                Size  Used Avail Use% Mounted on
10.10.58.1@o2ib:10.10.58.2@o2ib:/public1  2.7P  240T  2.3P  10% /public1

IP 内网IP

[sca3173@ln121%bscc-a5 public1]$ hostname -I | awk '{print $1}'
172.16.58.14

compute node

> cat lscpu.txt                
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                64
On-line CPU(s) list:   0-63
Thread(s) per core:    1
Core(s) per socket:    32
Socket(s):             2
NUMA node(s):          2
Vendor ID:             AuthenticAMD
CPU family:            23
Model:                 49
Model name:            AMD EPYC 7452 32-Core Processor
Stepping:              0
CPU MHz:               2345.724
BogoMIPS:              4691.44
Virtualization:        AMD-V
L1d cache:             32K
L1i cache:             32K
L2 cache:              512K
L3 cache:              16384K
NUMA node0 CPU(s):     0-31
NUMA node1 CPU(s):     32-63
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc art rep_good nopl nonstop_tsc extd_apicid aperfmperf eagerfpu pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_l2 cpb cat_l3 cdp_l3 hw_pstate sme retpoline_amd ssbd ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif umip overflow_recov succor smca

没有gcc/7.3.0

比赛是2节点128核的环境

计算节点网络拓扑图

我们是A5 分区。

没有找到手册,只有一个官网图。但是虽然频率是2.35GHz,但是内存只有251GB啊,什么情况。

FTP 2 : debug

选项含义

  1. 只能下载。不能上传、删除、重命名。write_enable=NO
  2. 只能上传、删除、重命名。不能下载。download_enable=NO
    STOR - store a file on the remote host 上传文件
    RETR - retrieve a remote file 下载文件
    

遇到的问题

  1. 修改好后,上传文件mkdir都会报错
    550 Permission denied.
    
    write_enable=YES 也不对,user_config_dir的注释忘改了
  2. 用虚拟用户配置
    响应:  500 OOPS: vsftpd: refusing to run with writable root inside chroot()
    
    解决办法
     write_enable=YES
     allow_writeable_chroot=YES
     chmod 755 upload
    
  3. 无法下载,是符合实际应用情况。但是如何改变 我以为只要 cmds_allowed=RETR 报错
    550 Failed to open file.
    
    sudo chmod 644 index3.html
    
  4. 可以删除文件。可以通过创建多个虚拟账号弥补。 禁止删除(去除DELE)
    cmds_allowed=FEAT,REST,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST
    
    或者
    cmds_denied=DELE
    

参考文献

VSFTPD实现用户权限不能删除 只能上传、下载

OpenVPN

实验室OpenVPN使用场景

  1. 首先有一个常年挂网络通的,可以校外网IP直连的机器A。
  2. 使用OpenVPN,将对内网机器的ssh请求,通过A机器转发。

所以如果没有可以校外网IP直连的机器A,OpenVPN是没有意义的。

配置OpenVPN服务器端

google openvpn查看 ubuntu https://ywnz.com/linuxyffq/3952.html

  1. 安装OpenVPN服务
  2. 安装easy-rsa,用来制作证书 wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
  3. 生成CA证书(crt=cert) 有ca.crt和ca.key两个文件
  4. 生成server端证书
    1. KEY_NAME = qszyvpn
    2. 应有qszyvpn.crt、qszyvpn.csr、qszyvpn.key三个文件
    3. 为服务器生成加密交换时的秘钥协议,应有dh2018.pem文件
  5. 生成Client端证书
    1. 应有client1.crt、client1.csr、client1.key三个文件
  6. 修改配置文件server.conf
  7. 配置规则
  8. 运行
    /etc/init.d/openvpn start
    
  9. 查看端口占用
    netstat -tunlp |grep 1194
    

具体服务器端文件生成命令

test on snode0

# 安装
sudo apt-get install openvpn
sudo apt-get install easy-rsa
# 配置easy-rsa
cd /etc/openvpn/server
cp -r /usr/share/easy-rsa/ . 
## 拷贝模板并修改vars的参数
cp vars.example vars
vim vars
# 配置Easyrsa及生成公钥
./easyrsa init-pki
    Note: using Easy-RSA configuration from: ./vars
    init-pki complete; you may now create a CA or requests.
    Your newly created PKI dir is: /etc/openvpn/server/easy-rsa/pki
./easyrsa build-ca nopass
    Common Name (eg: your user, host, or server name) [Easy-RSA CA]:acsa
    CA creation complete and you may now import and sign cert requests.
    Your new CA certificate file for publishing is at:
    /etc/openvpn/server/easy-rsa/pki/ca.crt
"nopass"参数是避免每次都要输入密码,可选项 这一步完成后,在pki目录下会生成ca.crt,pki/private目录下生成ca.key
# 生成服务器私钥和请求
./easyrsa gen-req shaojie nopass
    Common Name (eg: your user, host, or server name) [shaojie]:
    Keypair and certificate request completed. Your files are:
    req: /etc/openvpn/server/easy-rsa/pki/reqs/shaojie.req
    key: /etc/openvpn/server/easy-rsa/pki/private/shaojie.key
# 拷贝服务器私钥文件到openvpn配置文件目录下
cp pki/private/shaojie.key /etc/openvpn/server
因为同一台服务器即做CA服务器又做VPN服务器,自己给自己签发的时候会生成同名文件,先把服务器的请求文件改个名,再导入请求
# 生成服务器证书
mv pki/reqs/shaojie.req pki/reqs/shaojieServer.req
./easyrsa import-req pki/reqs/shaojieServer.req shaojie
    Using SSL: openssl OpenSSL 1.1.1f  31 Mar 2020
    The request has been successfully imported with a short name of: shaojie
    You may now use this name to perform signing operations on this request.
./easyrsa sign-req server shaojie
将两个shaojie.crt文件和ca.crt文件一起复制到openvpn配置文件目录下
cp pki/ca.crt pki/issued/shaojie.crt /etc/openvpn/server
# 生成加密文件(可选,可以提高VPN安全性),这个比较慢,需要稍等几分钟
./easyrsa gen-dh
    DH parameters of size 2048 created at /etc/openvpn/server/easy-rsa/pki/dh.pem
openvpn --genkey --secret ta.key #生成随机密钥(仅适用于非TLS静态密钥加密模式):--genkey : 生成一个随机密钥作为共享密钥
cp ta.key pki/dh.pem /etc/openvpn/server
至此,服务器端文件:ca.crt dh.pem easy-rsa shaojie.crt shaojie.key ta.key准备好了

openvpn配置文件

# 拷贝解压
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server
gzip -d /etc/openvpn/server/server.conf.gz
vim /etc/openvpn/server/server.conf
# 监听的端口号,默认1194,如果要改的话防火墙也要相应修改。(可选)
port 1194

#TCP或UDP,如改成tcp的话,通常端口相应修改成443
;proto tcp
proto udp

# 设置SSL/TLS根证书(ca)、证书(cert)和私钥(key),记得我的服务器名是axvpn,这里也要相应修改 (必选)
ca ca.crt
cert shaojie.crt
key shaojie.key 

# 指定迪菲·赫尔曼参数。
# 默认是dh2048.pem, 记得我们生成了dh.pem,改下 (必选)
dh dh.pem

# 推送路由信息到客户端,以允许客户端能够连接到服务器背后的其他私有子网。 (可选)
# 就是允许客户端访问VPN服务器自身所在的其他局域网
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
push "route 10.111.0.0 255.255.0.0"

# 如果启用该指令,所有客户端的默认网关都将重定向到VPN,这将导致诸如web浏览器、DNS查询等所有客户端流量都经过VPN。(可选)
;push "redirect-gateway def1 bypass-dhcp"

# 某些具体的Windows网络设置可以被推送到客户端,例如DNS或WINS服务器地址。(可选)
# 下列地址来自opendns.com提供的Public DNS 服务器。
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
push "dhcp-option DNS 8.8.8.8"

# 如果有注释的话,取消这句的注释,再加一句  (必选)
#防DDOS攻击,openvpn控制通道的tls握手进行保护,服务器端0,客户端1
tls-auth ta.key 0 # 该文件应该保密
key-direction 0

# 选择一个密码加密算法。
# 该配置项也必须复制到每个客户端配置文件中。 
# 添加SHA256算法
cipher AES-256-CBC
auth SHA256

# 在完成初始化工作之后,降低OpenVPN守护进程的权限, (最好取消注释)
# 该指令仅限于非Windows系统中使用。
user nobody
group nobody

# Notify the client that when the server restarts so it
# can automatically reconnect.
# 如果协议改成了TCP,这里数值要改成0
explicit-exit-notify 1

#推送一条路由信息给客户端
#推送路由,若是推送失败,需要检查server 是否设置正常,该故障我遇到过,设置ifconfig-pool了,发现推送失效
push "route 192.168.11.0 255.255.255.0" #(即这个网段的IP的信息都经过VPN)

#记录日志,每次重新启动openvpn后追加原有的log信息
log-append /var/log/openvpn.log

配置OpenVPN客户器端

或者设置isc.ovpn(中间两项是client的)

ca ca.crt
cert ???.crt
key ???.key 
tls-crypt tc.key
OneDrive下有snode6的ovpn文件

具体客户器端文件生成命令

# 生成客户端私钥和请求
./easyrsa gen-req tsjclient nopass
    Common Name (eg: your user, host, or server name) [tsjclient]:
    Keypair and certificate request completed. Your files are:
    req: /etc/openvpn/server/easy-rsa/pki/reqs/tsjclient.req
    key: /etc/openvpn/server/easy-rsa/pki/private/tsjclient.key
# 同理生成证书
mv pki/reqs/tsjclient.req pki/reqs/tsjclient2.req
./easyrsa import-req pki/reqs/tsjclient2.req tsjclient
./easyrsa sign-req client tsjclient
# 保存所需密钥、证书和之前的ta.key ca.crt
cp pki/private/tsjclient.key pki/issued/tsjclient.crt ta.key pki/ca.crt ../../client

OpenVPN的查看

sudo service openvpn status
 openvpn.service - OpenVPN service
     Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
     Active: active (exited) since Sat 2021-04-24 20:40:13 UTC; 2 months 22 days ago
   Main PID: 1691 (code=exited, status=0/SUCCESS)
      Tasks: 0 (limit: 154190)
     Memory: 0B
     CGroup: /system.slice/openvpn.service

Warning: journal has been rotated since unit was started, output may be incomplete.
$ cat server.conf
    local 202.38.73.26
    port 1194
    proto udp
    dev tun #tun路由模式,tap桥模式,据说tun效率高于tap,但是tun只能转发IP数据,tap是二层可以封装任何协议,window下只有tap模式
    ca ca.crt
    cert server.crt
    key server.key
    dh dh.pem
    tls-crypt tc.key # 新加入 ,不使用 tls-auth ta.key 0 改用 tls-crypt tc.key openvpn 2.4 版的新參數
    topology subnet # OpenVPN默认的拓扑方式是net30:表示掩码30位,有地址浪费
    server 10.8.0.0 255.255.255.0 #定义分配给客户端的IP段,服务端自己默认使用第一个可用地址
    ifconfig-pool-persist ipp.txt #在openvpn重启时,再次连接的客户端将依然被分配和以前一样的IP地址
    # push表示推送,即将配置推送给客户端,让客户端也使用
    push "redirect-gateway def1 bypass-dhcp" #重定向默认网关 此设置将路由/强制所有流量通过VPN。
    push "dhcp-option DNS 202.38.64.56" #指定客户端使用的主DNS
    push "dhcp-option DNS 202.38.64.17" #指定客户端使用的备DNS
    server-ipv6 2001:0db8:ee00:abcd::/64
    push "route-ipv6 2001:da8:d800:811:ae1f:6bff:fe8a:e4ba/64"
    push "route-ipv6 2000::/3"
    keepalive 10 120 #表示每隔10秒ping一下客户端/服务端,若是120秒内无响应,认为down,随即重启openvpn(强烈开启)
    auth SHA512 # 加密算法
    cipher AES-256-CBC
    user nobody # 待openvpn初始化完成后,将其降级为nobody权限运行
    group nogroup
    persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
    persist-tun #通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,否则网络连接会先linkdown然后linkup
    status openvpn-status.log #状态文件:定期(默认60s)把状态信息写到该文件,以便自己写程序计费或者进行其他操作(需要关闭selinux)
    verb 3 #日志记录级别,可选0-9,0只记录错误信息,4能记录普通的信息,5和6在连接出现问题时能帮助调试,9显示所有信息,甚至连包头等信息都显示(像tcpdump) 
    crl-verify crl.pem # crl证书 ./easyrsa gen-crl产生,默认180天过期
    explicit-exit-notify # 如果协议改成了TCP,这里数值要改成0
OpenVPN配置文件通常位于/etc/openvpn中,通常命名为*.conf。 server.conf是规范的;客户端配置文件名通常类似于.conf

subnet(子网拓扑)

注意用户ccd文件固定ip时候写法变成了:

ifconfig-push 10.8.0.3 255.255.255.0
10.8.0.3是给VPN用户分配的虚拟IP,其服务端是server 10.8.0.0 255.255.255.0,也就是10.8.0.0/24,用户只能获取到10.8.0.X的虚拟IP,去掉10.8.0.1、10.8.0.255就只剩下253个可分配的IP池了。

重定向默认网关

为什么要重定向网关:vpn客户端是经常出差的,网络环境不安全,希望它将所有流量传到公司,经公司出口

其中包含的flags有"local autolocal def1 bypass-dhcp bypass-dns block-local ipv6 !ipv4"(多个标志之间用空格分隔),

推荐使用def1,它使用0.0.0.0/1和128.0.0.0/1而不是0.0.0.0/0来覆盖默认网关,即有新路由也保留原始默认网关,只是优先匹配而已

block-local 是表示当客户端拨入后,阻断其除与本地网关的访问外,本地的其他IP都不允许访问

PKI

Public Key Infrastructure(PKI),中文叫做公开密钥基础设施,也就是利用公开密钥机制建立起来的基础设施。

  1. PKI的核心是身份证明书的发行
  2. PKI的世界里,这个身份证明书,被叫做“证明书”。发行“证明书”的机关叫做“认证机关”。还有一个就是统一管理证明书的证书“档案库/证书库”。这三个东西加起来,就是PKI的主要构成要素。
  3. 证明书是被存放在硬盘或者IC卡里面的。证明书的文件构造是一种叫做 X.509 的协议规定的。另一方面,认证机关也其实就是一个网络应用程序。
  4. PKI提供的证明书可以用来 身份确认 和 通信加密。
  5. 用“证明书中的密钥”加密过的内容,只能用自己才有的另一个“私人的密钥”才能解密。这样的话,如果你发送给自己的内容被他人窃取的话,他人也无法解密。
  6. 在PKI机制中,放在“证明书里面的密钥”可以被任意自由分发,这里的“证明书里的密钥”被叫做“公开密钥(Public Key)”。与此相对,本人保管的那个“私人的密钥”就要做“私有密钥(Private Key)”。
  7. 认证机关的可信度,直接与证书的可信度挂钩,也就是与整个PKI机制的可信度息息相关。
  8. 在技术上,伪造证明书是非常简单的。所谓假的证明书,比如说有一个所谓的“比尔的证明书”,但是里面含有的公开密钥是史提芬的公开密钥。那么,别人发给比尔的信息,史蒂芬可以解密,反而比尔自己不能解密。

如何查看OpenVPN已连接的用户

将标志--management IP port [pw-file]添加或将相同的指令添加到您的中server.conf,例如:

management localhost 7505

这将允许您远程登录到该端口,并为您提供要运行的命令列表:

telnet localhost 7505

help

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

5分钟让你知道什么是PKI

https://www.wsfnk.com/archives/698.html

USTC Network Information Center

科大各个校区的IP

  1. 根据中国各地IP分布图
  2. 科大的IP如下,但是我还是不知道是哪个区的
    1. 114.214.160.0 114.214.255.255 我的IP在这,这可能是西区
  3. 西区活动中心机器IP
    1. 210.45.112.144
    2. 202.38.72.23 中国科学技术大学教育网
    3. 222.195.72.118
  4. 瀚海机器
    1. 211.86.151.101
  5. wlt之前有个各网络出口,现在403了

如何根据IP确定地址(比省市更具体)

http://ip.yqie.com/ip.aspx?ip=210.45.112.144

只能查询到都是科大的地址

如何判断IP是动态还是静态

vi /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO=dhcp 说明是DHCP 获得的地址 可是机器上就没有/etc/sysconfig/这个目录???

科大网络提供哪些服务

只有校内教工才可以申请域名。

个人主页ftp系统服务

  1. 教工服务器的域名为 staff.ustc.edu.cn, IP 地址为 202.38.64.11。 个人主页网络地址形式为 http://staff.ustc.edu.cn/~username 。 学生服务器的域名为 home.ustc.edu.cn, IP地址为 202.38.64.10。 个人主页网络地址形式为 http://home.ustc.edu.cn/~username 。
  2. 这两台服务器均支持 IPv6访问,域名分别是 staff6.ustc.edu.cn 和 home6.ustc.edu.cn 。
  3. 出于安全考虑,个人主页不支持 php 等服务器端程序。
  4. 用命令行方式登录 FTP 系统时会提示用户的使用情况(注:有些 ftp客户程序如IE不显示这些消息),如提示“Login OK, used 11M of 200M.”

而且我发现科大的IP都属于"国内免费IP地址"指中国教育和科研网免费地址列表范围内的IP地址。列表

主页代理是什么?

没有主页代理以前,用户的主页放在某台计算机上,可以被访问的范围就取决于这台计算机的IP地址开通的范围。利用主页代理技术,Internet上所有的计算机都可以通过域名访问用户的主页,而且没有流量费。

主页代理要求用户为自己的主页申请一个域名,指向网络中心的主页代理服务器,并把自己的主页放在校园网络上的某台计算机(不含宿舍网络、VPN以及无线上网的计算机 )上。当网络上的某台计算机通过域名访问到网络中心的主页代理服务器时,主页代理服务器就会从用户的计算机上把主页内容取过来,并返回给访问的计算机。

静态IP出校管理

telnet 202.38.64.59 8888
    Your IP is 202.38.73.26:

    Sorry, your IP has no right to go out USTCnet.
    Connection closed by foreign host.

电子邮件

我校邮件系统的主页网址是 http://email.ustc.edu.cn(普通,非SSL加密)和 https://mail.ustc.edu.cn(SSL加密),供用户免费使用,默认,教师用户空间为4GB,学生用户空间为500MB。

另:各有1GB作为“网络存储”(即“网络磁盘”)用于存放用户的个人文件;具有个人主页和FTP服务,详见个人主页/FTP系统。

学生毕业离校或者教工离职半年后,邮箱可以继续使用,但容量将会缩减,个人主页和FTP系统权限也取消。

我校邮件系统支持POP3/IMAP收信协议和SMTP发信协议,IP地址同为202.38.64.8,设置时需要身份验证,用户名和密码同邮件。

电子邮件地址形式为: 教工:@ustc.edu.cn 学生:@mail.ustc.edu.cn

需要进一步的研究学习

linux如何判断IP是动态还是静态

参考文献

https://netfee.ustc.edu.cn/faq/index.html#netacctypes