Create new server in LUGi

Create VM on vCenter

vCenter 地址:vcenter2.vm.ustclug.org

按照提示创建虚拟机

  • Step 7: Customize hardware
    • Network:
      • ustclug: intranet
      • ustclug-bridge: 没有 MAC 源地址检查
      • cernet: 教育网(先选这个,以便于通过网络安装系统)
    • VM options
      • VMware Tools
        • 打开 Sync time with Host

Install OS

Notes:

将网络改为 cernet,以便用 DHCP 获得 IP 地址,用 PXE 安装系统。

几个关键配置:

  • hostname: 主机名,如 vpnhc
  • domain name: 搜索域,一般设为 s.ustclug.org
  • 用户设置:先设置一个临时用户(尽量不与之后要配置的 ldap 账号冲突),用于初始登陆配置,之后删除
  • 磁盘设置:使用整个硬盘,只留一个主分区,不留 swap 等分区,方便扩容

Configure network

  • 增加 hostname.s.ustclug.org 的 DNS 解析。(ustclug.intranet)
  • 在 vCenter 中更改网络为 ustclug (如果不需要源 MAC 地址检查,选 ustclug-bridge)
  • 在虚拟机中重启网络接口,改为静态 IP,并更改网关 (10.254.0.254)
    • ifdown
    • edit interface coonfig files
    • ifup
  • 更改虚拟机的 DNS 和 domain/search:
    • DNS:
      • neat-dns (10.254.0.253)
      • dns backup (202.38.93.94)
    • domain/search:
      • s.ustclug.org

Install tools

  • 根据需要换源,加入安全更新源等
  • 安装 open-vm tools
  • 安装 openssh

Configure LDAP

LDAP服务使用及配置说明

Servers Intranet

Servers Intranet connect all the servers together, including physics servers and virtual machines.

Network Topology

topology

以上架构图由Hypercube在2018年5月更新。以下信息是过时的,不过有参考价值。

The network contains three parts:

  • Physical Switch in East Library Data Center
  • Virtual Switch on vSphere host machine
  • tincVPN

tincVPN is a mesh VPN, which can be abstructed as a virtual Switch.

vm-nfs.s.ustclug.org runs a layer 2 bridge, connecting tincVPN and SRW2024(physical switch).

It is obvious that vm-nfs is a single point of failure of communicating between tinc host and vSphere virtual machine. I had tried to add another bridge node, but resulted in a broadcast storm. Maybe we can fix it by MPLS (merged in mainland kernel 4.3). But it isn't a right timing at this time.

Network information

The network contains two subnets:

  • 10.254.0.0/21
  • 10.254.10.0/24

Every server binds one and only one IP address in 10.254.0.0/21, used to communicate with each other.

10.254.10.0/24 is used for 1to1 IP mapping. At this time, it just used between linode(10.254.10.2) and blog(10.254.10.1).

Address planning

  • 10.254.0.1~ 10.254.0.254: physics server and virtual machine
  • 10.254.1.1~ 10.254.1.254: docker container
  • other address: not used yet.

PXE

LUG Intranet VPN

service: intranet.ustclug.org

server: board.s.ustclug.org

Introduction

Server intranet is a closed network, which cannot be accessed from Internet. LUGI VPN helps maintainer get access to intranet temporarily.

LUGI VPN is running in Banana Pi, the only ARM architecture device we owned. Using OpenVPN protocal, authorizing via LDAP.

Configuration

OpenVPN LDAP auth plugin config /etc/openvpn/auth-ldap.conf:

<LDAP>
    URL             ldaps://ldap.ustclug.org
    Timeout         15
    FollowReferrals yes
    TLSCACertFile   /etc/ldap/ssl/slapd-ca-cert.pem
</LDAP>

<Authorization>
    BaseDN          "ou=people,dc=lug,dc=ustc,dc=edu,dc=cn"
    SearchFilter    "(uid=%u)"
    RequireGroup    false
</Authorization>

In openvpn configuration:

...
plugin /usr/lib/openvpn/openvpn-auth-ldap.so /etc/openvpn/auth-ldap.conf

Servers intranet is a layer 2 network without default gateway. So NAT is needed:

iptables -t nat -A POSTROUTING -s 10.254.248.0/22 -d 10.254.0.0/21 -j MASQUERAD

LDAP服务使用及配置说明

LDAP是轻量目录访问协议,我们用的软件是OpenLDAP。

LDAP的配置很麻烦,所以装了一个网页前端来配置它,网页前端是gosa。

GOsa 使用

网页界面位于 ldap.ustclug.org

用你的账号登录进去之后,可以在右上角退出,右上角还有两个按钮分别是修改账号信息和修改密码。账号信息第一页大部分是没用的,只有一个登录名是有用的,这是你登录任何地方的用户名。

Users 和 Groups

Users是用来添加和配置用户信息的地方。最主要的功能位于每个User的第二页POSIX,这里可以设置用户的家目录,UID,GID,以及所属的用户组。这里需要注意的地方如下:

  • UID,GID从2000开始计数,由于gosa不能对UID自动增长,所以管理员需要人工增长,GID建议不要每人一个,我们建一个member组,给大家都加进来,这样就只需要考虑UID的增长了。
  • 建账号之前先注意一下各个服务器上有没有相同的用户名,有的话把原家目录chown到新的UID,GID,删除同名用户。

Access Control

这里可以配置gosa的编辑权限,现在这里面只有一个组,是完全权限的。另外,每个项可以设置专门针对这个项的ACL。

Sudo rules

这里配置sudo权限。这里的语法和sudoers一样(请无视System trust)。特别要说的一点是通过在System中加入主机名可以针对每个主机配置权限,这里要填的是主机名而不是域名,具体范例请看里面的lugsu wikimanager等项。

其它我没提到的项我也没搞明白怎么用。。。

gosa的配置文件在/etc/gosa/gosa.conf,它是在第一次运行gosa时候自动生成的,但在之后就只能通过手动编辑来修改。由于配置文件几乎没有文档,官方的FAQ有好多是错的,所以我基本没动:-D。

LDAP 客户端配置

Debian配置方法

软件包安装

Debian 7系统需要安装如下软件包,libnss-ldapd libpam-ldapd sudo-ldap。Debian 5 中没有 libpam-ldapd,相应的软件包叫做 libpam-ldap。

注 :更新这些软件包时,注意保留一个root终端,更新后可能需要重启daemon进程

在安装过程中会被问一些问题(不同版本的 Debian 的问题可能不同):

  • ldap 服务器地址是 ''ldaps://ldap.lug.ustc.edu.cn''
  • Base DN为 ''dc=lug,dc=ustc,dc=edu,dc=cn''
    • 协议为版本3
    • 配置 libnss-ldapd 时有个选 “Name services to configure” 的,全部选

/etc/ldap/ldap.conf

编辑 /etc/ldap/ldap.conf 内容如下

BASE dc=lug,dc=ustc,dc=edu,dc=cn
URI ldaps://ldap.lug.ustc.edu.cn
TLS_CACERT /etc/ldap/ssl/slapd-ca-cert.pem
TLS_REQCERT demand
SUDOERS_BASE ou=sudoers,dc=lug,dc=ustc,dc=edu,dc=cn

为了安全性考虑,要以ldaps的方式连接ldap服务器,同时应配置好证书(/etc/ldap/ssl/slapd-ca-cert.pem,暂时需要从其它服务器下载)

/etc/sudo-ldap.conf

这个文件应该直接软链接到 /etc/ldap/ldap.conf。

/etc/nslcd.conf

注意检查一下此配置文件是否与/etc/ldap/ldap.conf下的内容相一致,如

uid nslcd
gid nslcd
uri ldaps://ldap.lug.ustc.edu.cn
base dc=lug,dc=ustc,dc=edu,dc=cn
ssl on
tls_reqcert demand
tls_cacertfile /etc/ldap/ssl/slapd-ca-cert.pem

/etc/nsswitch.conf

安装软件包时,安装脚本已经处理过该文件。检查一下内容,大致为:

passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap
......
sudoers:	files ldap

注意每一项后面的“ldap”,如果没有要手动加上。不太清楚具体含义,反正给每一项都加上“ldap”是没有问题的。

此时输入getent passwd,应该可以看到比/etc/passwd更多的内容,这就说明配置正确了。如果还有问题,重启一下 nscd、nslcd 服务试试。

PAM 配置

如果 PAM 配置错误,可能导致用户无法使用 SSH 登录,甚至连 sudo 也可能挂掉。所以修改 PAM 配置时:

  1. 请做好文件备份;
  2. 请另开一个 root 终端以防万一。

对于 Debian 7,只需设置一处。为了登录时自动创建家目录,在/etc/pam.d/common-session中添加下面这句:

session     required      pam_mkhomedir.so skel=/etc/skel umask=0022

对于 Debian 5,需要手动修改 PAM 配置文件http://www.rjsystems.nl/en/2100-openldap-client.php#pamc

/etc/pam.d/common-auth:

auth	    sufficient	  pam_unix.so	     nullok_secure
auth	    sufficient	  pam_ldap.so	     use_first_pass
auth	    required	  pam_deny.so

/etc/pam.d/common-account:

account     sufficient	  pam_unix.so
account     sufficient	  pam_ldap.so
account     required	  pam_deny.so

/etc/pam.d/common-password

password    sufficient	  pam_unix.so	     nullok obscure md5
password    sufficient	  pam_ldap.so
password    required	  pam_deny.so

/etc/pam.d/common-session

session     required      pam_unix.so
session     required      pam_mkhomedir.so skel=/etc/skel umask=0022
session     optional      pam_ldap.so

CentOS配置方法

通过 yum 安装 openldap openldap-clients nss_ldap nss-pam-ldap

以 root 身份执行

authconfig --enablecache \
       --enableldap \
       --enableldapauth \
       --ldapserver="ldaps://ldap.lug.ustc.edu.cn/" \
       --ldapbasedn="dc=lug,dc=ustc,dc=edu,dc=cn" \
       --enableshadow \
       --enablemkhomedir \
       --enablelocauthorize \
       --update

注意,由于 authconfig 的 bug,上一条命令的执行环境必须是 en_US.UTF-8

Sudo 的配置是通过 sssd 实现的,参考https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sssd-ldap-sudo.html

安装 sssd libsss_sudo 将 /usr/share/doc/sssd-common-xxx/sssd-example.conf 复制到 /etc/sssd/sssd.conf 并修改权限为 600。

[zguangyu@pxe ~]$ sudo diff /usr/share/doc/sssd-common-1.14.0/sssd-example.conf /etc/sssd/sssd.conf
3c3
< services = nss, pam
---
> services = nss, pam, sudo
8c8
< ; domains = LDAP
---
> domains = LDAP
15,17c15,17
< ; [domain/LDAP]
< ; id_provider = ldap
< ; auth_provider = ldap
---
> [domain/LDAP]
> id_provider = ldap
> auth_provider = ldap
22,24c22,25
< ; ldap_schema = rfc2307
< ; ldap_uri = ldap://ldap.mydomain.org
< ; ldap_search_base = dc=mydomain,dc=org
---
> ldap_schema = rfc2307
> ldap_uri = ldaps://ldap.lug.ustc.edu.cn/
> ldap_search_base = dc=lug,dc=ustc,dc=edu,dc=cn
> ldap_sudo_search_base = ou=sudoers,dc=lug,dc=ustc,dc=edu,dc=cn
30c31
< ; cache_credentials = true
---
> cache_credentials = true

另外记得像前面在 Debian 中安装介绍到的那样修改 /etc/nsswitch.conf 以及 /etc/nslcd.conf.

NSCD 使用说明

NSCD是用于LDAP缓存的服务,目前在mirrors上的配置是保持30天。这导致的问题是每当ldap服务器上做出修改的时候需要在mirrors上执行 ((目前 mirrors 服务器暂未配置 LDAP 认证。))

nscd -i passwd
nscd -i group

参考: https://wiki.debian.org/LDAP/NSS

部署情况

目前所有服务器均已部署LDAP

已知的 GID

GID 名称 说明
2001 ldap_users 所有用户都在这个组里
1001 ssh_docker2 -
2013 ssh_bbs -
2014 ssh_linode -
2101 ssh_ldap -
2102 ssh_blog -
2103 ssh_dns -
2104 ssh_gitlab -
2105 ssh_lug -
2106 ssh_vpn -
2107 ssh_mirrors -
2108 ssh_pxe -
2109 ssh_freeshell -
2110 ssh_backup -
2112 ssh_vmnfs -
2113 ssh_homepage -
2201 sudo_ldap -
2202 sudo_blog -
2203 sudo_dns -
2204 sudo_gitlab -
2205 sudo_lug -
2206 sudo_vpn -
2207 sudo_mirrors -
2208 sudo_pxe -
2209 sudo_freeshell -
2210 sudo_backup -
2212 sudo_vmnfs -
2213 sudo_homepage -
2000 super_manager -
2999 nologin 不确定这个组有没有用
  • 从上文的规范来讲,应该从 2000 开始编号 GID,但有些组可能创建者没注意,不过后期再改就不方便了。
  • ssh_* 这些组,是在每个主机的 sshd_config 里只允许相应的组登陆。
  • sudo_* 这些组,是在 LDAP sudo rules 里允许了相应的组。

本文档原始版本复制自LUG wiki,由张光宇、崔灏、朱晟菁、左格非撰写。

SSH Certificate Authentication

discussion: SSH升级到证书登陆方案讨论

usage: SSH证书认证的使用方法

Introduction

There are two types of SSH Certificate:

  • Root certificate
  • Host certificate

Root certificate can only be used to issue a host certificate. Host certificate can be used for authentication on both server side and client side. But host certificate cannot issue a new certificate, it is the very difference from x509 certificate.

Root certificate is stored in cuihaoleo's loongson laptop. And knight42 have another backup.

issue a server certificate

copy the /etc/ssh/ssh_host_rsa_key.pub from target server. (salt is your frined)

Then, run ssh-keygen to issue a public key. For example:

ssh-keygen -s /path/to/ssh_ca -I blog -h -n blog.s.ustclug.org,blog.p.ustclug.org,10.254.0.15,202.141.176.98,202.141.160.98 ssh_host_rsa_key.pub

Then, copy the certificate file ssh_host_rsa_key-cert.pub back to target server.

At last, add the following line to /etc/ssh/sshd_config:

HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub

Certificate will take effect until ssh daemon restarted.

issue a client certificate

ssh-keygen -s /path/to/ssh_ca -I certificate_identity -n principals -O option -V validity_interval public_key_file

For example:

ssh-keygen -s /path/to/ssh_ca -I "Yifan Gao" -n yifan -V +365d yifan.pub

In general, certificate_identity is user full name, and principals is the LDAP user name. In addition, one user can own multiply principals in one certificate, like:

ssh-keygen -s /path/to/ssh_ca -I "Yifan Gao" -n yifan,root,liims -V +365d yifan.pub

It authorizes the certificate owner to login server with yifan, root and liims username.

tip: "liims" principal is used to login to library inquiring machine.

PXE

PXE

PXE

PXE

PXE

PXE

PXE

监控系统使用及配置说明

监控系统由以下几个组件组成:

  • telegraf: agent,运行在每个被监控的机器上
  • influxdb: 数据库,运行在 influxdb.ustclug.org (docker2.s.ustclug.org)
  • ganglia: 可视化工具,监控报警,地址:monitor.ustclug.org (docker2.s.ustclug.org)

Install telegraf

安装方法见:

https://docs.influxdata.com/telegraf/v1.6/introduction/installation

一个典型的安装命令是:

wget https://dl.influxdata.com/telegraf/releases/telegraf_1.6.1-1_amd64.deb
sudo dpkg -i telegraf_1.6.1-1_amd64.deb

Configure telegraf

配置文件在 /etc/telegraf/ 目录下,用 root 权限修改:

/etc/telegraf/telegraf.d/ 下增加 net.conf 用来开启网络监控,内容如下:

# /etc/telegraf/telegraf.d/net.conf
[[inputs.net]]

/etc/telegraf/telegraf.conf 中的[[outputs.influxdb]]增加 influxdb 的地址:

[[outputs.influxdb]]
  urls = ["http://influxdb.ustclug.org:8086"]

其他配置保持默认即可,配置完成之后,重启 telegraf 服务,并确保服务运行正常。

sudo systemctl restart telegraf
sudo systemctl status telegraf

Web

Web 端监控位于: https://monitor.ustclug.org ,登陆账号同 ldap,可以在这里设置预警提示等。

PXE

PXE

PXE

开源镜像站

历史

debian.ustc.edu.cn

2000年左右,科大校内的Debian爱好者使用自己实验室的机器为大家提供Debian镜像服务。随着一届届师兄的毕业,服务器在各实验室间接力。

2002年5月,Debian镜像站有了自己的域名debian.ustc.edu.cn,但服务器仍在实验室间辗转。

2002年6月23日,科大Debian镜像站开始提供非官方(UO)软件仓库。2004年4月23日,提供新的UO仓库。

2005年6月20日,科大LUG发起为科大Debian镜像站捐款的倡议,截至10月1日募捐活动停止,LUG共收到2922.05元捐款。10月6日新机器安装配置到位。在大家的齐心努力之下,科大Debian镜像站有了一个相对固定的“家”。

2009年底,debian.ustc落户图书馆技术部。

oss.ustc.edu.cn

2008年12月25日,科大开源软件(OSS)镜像站正式启用。其服务器由吴峰光师兄提供。Novell公司为我们提供了一块1.5T的硬盘。

2009年12月,张成师兄为OSS镜像站提供捐赠1T硬盘。

2010年6月,科大LUG使用出售版衫余下的钱为OSS镜像站添置了一块2T硬盘。

mirrors.ustc.edu.cn

2011年4月8日,科大LUG从网络中心处获得了新的服务器,并申请到了mirrors.ustc的域名。debian.ustc与oss.ustc开始向mirrors.ustc迁移。

同年4月15日,几大热门发行版镜像同步完毕。mirrors开始正式对外提供服务,同时debian.ustc与oss.ustc退出了历史舞台。

2013年1月6日,科大LUG从网络中心处获得了新的磁盘阵列,大大缓解了mirrors因磁盘空间不足而带来的压力。

2016年12月29日,科大LUG从网络中心处获得了新的服务器。解决了近一年来由于服务器和阵列老化带来的稳定性问题。

硬件配置

2016年-至今

参数 配置
CPU 双路E5-2620
Mem 256GB DDR4
Disk 6T*12(HDD), 250G*2(SSD)
Ethernet 1Gbps * 2

曙光I620-G20 导航光盘

2011年-2016年

参数 配置
CPU Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
Mem 48GB
Disk LSI Logic MegaRAID SAS 8708EM2 x 2
DFT RS-3016I-S/D30 磁盘阵列
Ethernet Ethernet Intel 82574L Gigabit x 2

曙光i620r-G 用户手册

PXE

PXE

PXE

PXE

PXE

PXE

限制策略

由于 mirrors 属于IO、网络密集型服务,在部分的负载场景下极易出现IO或网络过载。限制策略主要是为了减弱以下几类请求对mirrors整体服务质量的影响:

  1. 突发性的高并发请求
  2. 爬虫类流量
  3. 不合理的请求(如:极少数用户的大量请求)

白名单

一般而言,科大校内的地址位于限制规则的白名单中,不受到限制策略的影响。如果没有特殊说明,科大地址默认不受限制。

白名单位于:

  • /usr/local/network_config/ipset.list
  • /etc/nginx/conf.d/geo-ustcnet.conf

防火墙级别限制

防火墙(iptables)目前只负责限制单IP的并发链接数。这是为了防止同时涌入大量并发连接,导致后端应用耗费大量CPU、IO资源处理这些不合常理的请求。

端口 服务 最大连接数 IPv4 CIDR IPv6 CIDR
1 80,443 HTTP/HTTPS 11 29 64
2 20,21,50100:50200 FTP 2 32 128
3 873 Rsync 2 32 64
4 9418 Git 6 32 128

请注意,同组内的连接共享连接数配额。如:

  1. 10.0.0.1与10.0.0.2共享HTTP限额
  2. 1.1.1.1 发起的 HTTP与HTTPS连接共享11个连接数限额

超过配额的连接会返回tcp reset。

应用级别限制

此类限制规则位于应用程序内。由于在用户态程序中实现,因此更加灵活。

Nginx LUA组件

代码位于 /etc/nginx/lua/access.lua

目前使用了Nginx的lua语言扩展实现对请求的限制。主要有以下三类限制方式:

  1. 按连接数限制(即:并发请求数)
  2. 按请求速率限制
  3. 按累计请求数限制(周期性重置计数器)

目前,镜像站配置了以下几种功能的限制器:

  1. 全局请求速率限制器:对所有请求,限制单IP的请求速率。
  2. 全局请求数限制器:对于所有请求,检测单IP在一天内的累计请求数。超过阈值后,降低该IP的全局请求速率限制器的阈值。
  3. HEAD请求数限制器:对于HTTP Method == HEAD类型的请求,检测单IP在一天内的累计请求数。超过阈值后,开启HEAD请求速率限制器
  4. HEAD请求速率限制器:对于HTTP Method == HEAD类型的请求,限制单IP的请求速率。该限制器默认关闭。
  5. 断点续传请求速率限制器:对于断点续传类型的请求,限制单IP的请求速率。
  6. 断点续传连接数限制器:对于断点续传类型的请求,限制单IP单URI的连接数。
  7. 目录请求速率限制器:对于列目录类型的请求,限制单IP请求速率。
  8. 文件请求速率限制器:对于非目录类型的请求,限制单文件请求速率。即:所有用户之间共享同一个配额。
    • 例外:apt/yum仓库的索引文件不受限制。
    • 案例:曾遇到过攻击者分布式请求同一个大文件,导致IO、网络同时过载。 基于IP地址的限制措施对于源地址池很大的攻击往往没有效果,限制单文件的请求速率能够有效缓解这类攻击。

具体参数参考下表:

限制器名称 阈值单位 阈值 突发量 计数器重置周期 动作
全局请求速率限制器 次/秒 40 100 / 返回429错误
全局请求数限制器 15000 / 1天 设置全局请求速率限制器阈值为 0.2
HEAD请求数限制器 300 / 1天 开启HEAD请求速率限制器
HEAD请求速率限制器 次/秒 0.05 5 / 返回429错误
断点续传请求速率限制器 次/秒 1 10 / 返回429错误
断点续传连接数限制器 1 0 / 返回429错误
目录请求速率限制器 次/秒 0.5 10 / 返回429错误
文件请求速率限制器 次/秒 5 50 / 返回429错误

到达阈值后会发生什么?

  • 当请求速率超过阈值,但未超过突发量时,限制器会计算出一个满足阈值条件的最小等待时间。连接会被丢入等待池,到达等待时间后再被处理。
  • 当请求速率超过阈值,且超过突发请求量时,将会在等待5秒后返回 HTTP 429 错误。

限制器之间相互独立,当被触发的所有限制器产生不一致的等待时间时,应用最长的等待时间。

NGINX JS 挑战

代码位于/etc/nginx/sites-available/iso.mirrors.ustc.edu.cn

为了抵抗“迅雷攻击”。对于特定类型的文件,开启了JS挑战。 如果客户端User-Agent为Mozilla(即浏览器),则发送一段包含JS脚本的页面,检验运行的结果。如果挑战失败,则返回错误。

被保护的文件类型有:

  • iso
  • exe
  • dmg
  • run
  • zip
  • tar

爬虫限制

代码位于/etc/nginx/snippets/robots

如果客户端User-Agent包含Spider、Robot关键字, 则禁止其访问仓库内容。避免由于频繁列目录带来大量IO负载。

Rsync 总连接数限制

Rsync服务设置了总连接数限制。即:当建立的连接数到达某个阈值后,拒绝之后收到的连接。

由于白天HTTP访问压力较大,夜晚HTTP访问量较小,为了实现错峰同步,因此针对不同时段设置了不同的阈值,具体如下:

  • 23:00 ~ 8:00 :最多60个连接
  • 8:00 ~ 23:00:最多30个连接

特别的,科大IP地址受到rsync连接数限制。

PXE

Mail List

Plugin Email Subscribers & Newsletters on servers.ustclug.org sends a mail to Google Group when a new article posted on mirrors catalogue.

The mails are sent from servers@ustclug.org, which is a member of Google Group with write permission.

Google Group: ustc-mirrors@googlegroups.com

Refer to Gitlab Wiki.

PXE

Authoritative DNS

services:

  • ns-a.ustclug.org
  • ns-b.ustclug.org

servers:

  • ns-a.s.ustclug.org
  • ns-b.s.ustclug.org

Deploy

  • Bind configuration https://git.ustclug.org/ustclug/auth-dns
  • Bind Dockerfile https://github.com/zhsj/dockerfile/tree/master/bind9

The bind configuration repository is only visible to admins since private key is included.

# copy the ssh key https://git.ustclug.org/ustclug/auth-dns/blob/master/git_pull_key
# to ~/.ssh/id_ed25519

# now get the conf
git clone git@git.ustclug.org:ustclug/auth-dns.git /var/lib/bind

# delete the ssh key
rm ~/.ssh/id_ed25519
docker run --restart=always -v /var/lib/bind/:/etc/bind \
       --net host -it -d --name=auth-dns zhusj/bind9

Update DNS Record

Just commit your change to the configuartion repository. More details can be found in the repository.

Webhook

Please add a webhook in the configuration repository, so that the DNS record can be automatically updated when we commit.

The webhook endpoint is http://<server_ip>:9000/hooks/bind, see https://git.ustclug.org/ustclug/auth-dns/settings/integrations for example.

PXE

PXE

PXE

PXE

PXE

PXE

PXE

Light Accelerator

service: light.ustclug.org

Git Repositry:

DockerHub:

mail list: 轻量级网络加速服务

server:

  • swarm.s.ustclug.org (docker container)
    • light-mysql
    • light-freeradius
    • light-server
    • light-web
  • gateway-el.s.ustclug.org (port mapping)
    • 29979 -> light-server.d.ustclug.org:29979
    • 29980 -> light-server.d.ustclug.org:29980
  • revproxy-el.s.ustclug.org (reverse proxy)
    • light.ustclug.org -> light-web.d.ustclug.org
  • docker2.s.ustclug.org

deploy

deploy script: docker-run-script/light

deploy order:

  1. mysql
  2. freeradius, light-web
  3. squid

Add new domain

git clone https://git.ustclug.org/lug-light/accelerate-list.git
cd accelerate-list
./tools/add-domain.sh accelerate.list www.example.com
git commit -v -a
git push origin master

Travis CI will update PAC files in LUG FTP automatically.

PGP Key Server

service: pgp.ustc.edu.cn

server: pgp.ustc.edu.cn

Deploy

  • Dockerfile: https://github.com/zhsj/dockerfile/tree/master/sks-full
  • Deployment: https://github.com/zhsj/sks-ustc

运行时需要将容器内的 /var/lib/sks 挂载出来,第一次运行请在 /var/lib/sks/dump/ 目录放初始数据库。

zhusj/sks:full docker 镜像里面包含了 sks 和 caddy。暴露了 11370 端口,用于和别的服务器做 peer;还有 11371, 80, 443 端口,都是提供 HTTP 访问的,gpg 用的 hkp 协议其实是 HTTP 协议,只是规定了默认端口为 11371。

具体的部署流程可以参考 https://github.com/zhsj/sks-ustc/blob/master/deploy.sh

简单来说就是把配置文件(sksconf, membership, Caddyfile, web)拷贝到容器的卷上,然后运行容器就好了。

Maintenance

如果要修改配置文件,先 commit 到 https://github.com/zhsj/sks-ustc 仓库,然后在服务器的 /var/lib/sks-ustc 目录运行 git pull 更新 git 仓库。最后再重新运行一遍 deploy.sh 脚本就可以了。

注意事项

membership 由 @zhsj 维护,任何改动请务必事先联系。

因为和其他服务器相互 peer 认证时,是用 ip 做互相校验的。所以为了方便起见,运行 docker 容器时直接使用了 host 网络。

PXE

LIIMS

perhaps short for Libray Independent Inquery Machine System

server: pxe.s.ustclug.org

Git Repository:

使用liimstrap在ArchLinux下进行构建,liimstrap使用 方法参考仓库中的说明。

构建后需要推送到服务器上的/nfsroot/liims下,并设置/usr的所有者为liims。 机器的默认pxe启动配置在/home/pxe/tftp/pxelinux.cfg/下

示例qemu调试方法

创建并挂载临时镜像:

dd if=/dev/zero of=liims.img bs=4k count=1200000
mkfs.ext4 liims.img
mount -o loop liims.img /mnt

假设当前路径为liimstrap,修改initcpio/mkinitcpio.conf, 去掉HOOKS中的liims_root,增加block(仅调试时需要)。 使用liimstrap制作镜像./liimstrap /mnt。完成后使用 qemu打开调试:

qemu -kernel /mnt/boot/vmlinuz-lts\
     -initrd /mnt/boot/initramfs-linux-lts.img\
     -hda liims.img\
     -netdev user,id=mynet0,net=114.214.188.0/24,dhcpstart=114.214.188.9\
     -device i82557a,netdev=mynet0\
     -append "root=/dev/sda rootflags=rw"

注:其中netdev中的ip段可以自由选取,device中的设备名通过qemu -device \?查看后选择任一网络设备即可

Telegram Web

Service:telegram.ustclug.org

Repository:github.com/ustclug/telegram-web

DockerHub:ustclug/telegram-web

Deployment:telegram-web.sh

Servers:

  • swarm.s.ustclug.org(Docker Container)
  • revproxy-el.s.ustclug.org(reverse proxy)

Blog:add-telegram-web-service

LUG FTP

service: FTP/FTPS, SFTP, HTTP, HTTPS, AFP

Git Repository: github.com/ustclug/lugftp

DockerHub: ustclug/ftp

server: docker2.s.ustclug.org

theme: h5ai

deploy: ftp.sh

USTC Life

USTC Life is a navigation page, which included useful sites in USTC.

service: ustc.life

Git Repository: github.com/ustclug/ustclife

DockerHub: ustclug/ustclife

server: docker2.s.ustclug.org

deploy: /srv/webhook/ustclife.sh

webhook from DockerHub: /srv/webhook/hooks.json

Generate 204

Service: 204.ustclug.org

Configration: GitLab/nginx-config/sites-available/204.ustclug.org

Server: revproxy-el.s.ustclug.org

Blog: add-http-204-service