在 VMware ESXi 上部署 vCSA 实践

首先获取 vCSA 的 ISO 镜像,挂载到 Linux 下(如 /mnt),然后找到 /mnt/vcsa-cli-installer/templates/install 下的 embedded_vCSA_on_ESXi.json ,复制到其它目录并且修改必要的字段,第一个 password 为 ESXi 的登录密码,一会在安装的过程中再输入。下面有个 deployment_option,根据你的集群大小来选择,我则是用的 small 。下面配置这台机器的 IP 地址,用内网地址即可。下面的 system_name 如果要写 fqdn ,记得要让这个域名可以解析到正确的地址,不然会安装失败,我因此重装了一次。下面的密码都可以留空,在命令行中输入即可。SSO 为 vSphere Client 登录时用的密码和域名,默认用户名为 Administrator@domain_name (默认的话,则是 Administrator@vsphere.local) 这个用户名在安装结束的时候也会提示。下面的 CEIP 我选择关闭,设置为 false 。 接下来进行安装。 $ /mnt/vcsa-cli-installer/lin64/vcsa-deploy install /path/to/embedded_vCSA_on_ESXi.json --accept-eula 一路输入密码,等待安装完毕即可。然后通过 443 端口进入 vSphere Client, 通过 5480 端口访问 vCSA 的管理页面。两个的密码可以不一样。 2018-05-21 Update: 想要设置 VMKernel 的 IPv6 网关的话,ESXi 中没找到配置的地方,但是在 vSphere Client 中可以进行相关配置。

Read More

在脚本中寻找 X11 的 DISPLAY 和 XAUTHORITY

之前在搞一个小工具,在里面需要访问 X11 server ,但是访问 X11 server 我们需要两个东西:DISPLAY和XAUTHORITY两个环境变量。但是,由于它们在不同的发型版和Display Manager下都有些不同,所以花了不少功夫才写了一些。 为了验证我们是否可以连上 X11 server, 我们使用这一句: DIMENSIONS=$(xdpyinfo | grep 'dimensions:' | awk '{print $2;exit}') 它尝试打开当前的 DISPLAY,并且输出它的分辨率。接下来,我对不同的一些发型版,综合网上的方法,尝试去找到正确的环境变量。 对于 Debian: DISPLAY=$(w -hs | awk -v tty="$(cat /sys/class/tty/tty0/active)" '$2 == tty && $3 != "-" {print $3; exit}') USER=$(w -hs | awk -v tty="$(cat /sys/class/tty/tty0/active)" '$2 == tty && $3 != "-" {print $1; exit}') eval XAUTHORITY=~$USER/.Xauthority export DISPLAY export XAUTHORITY DIMENSIONS=$(xdpyinfo | grep 'dimensions:' | awk '{print $2;exit}') 对于 Archlinux:

Read More

在 macOS 和 Linux 之间搭建 tinc 网络

一直听说 tinc 比较科学,所以尝试自己用 tinc 搭建一个网络。这里,macOS 这段没有固定 IP 地址,Linux 机器有固定 IP 地址 linux_ip 。假设网络名称为 example , macOS 端名为 macos 地址为 192.168.0.2, linux 端名为 linux 地址为 192.168.0.1。 2018-11-11 注:本文用的 tinc 版本为 1.0.x ,而不是 1.1-pre ,两个分支命令不同,但协议可以兼容。 在 macOS 上配置: brew install tinc mkdir -p /usr/local/etc/tinc/example 新建 /usr/local/etc/tinc/example/tinc.conf: Name = macos Device = utun0 # use an unused number ConnectTo = linux 编辑 /usr/local/etc/tinc/example/tinc-up: #!/bin/sh ifconfig $INTERFACE 192.168.0.2 192.168.0.1 mtu 1500 netmask 255.

Read More

使用 Nginx 转发 VMware ESXi

我们的 VMware ESXi 在一台 NAT Router 之后,但是我们希望通过域名可以直接访问 VMware ESXi 。我们首先的尝试是,把 8443 转发到它的 443 端口,比如: socat TCP-LISTEN:8443,reuseaddr,fork TCP:esxi_addr:443 它能工作地很好(假的,如果你把 8443 换成 9443 它就不工作了),但是,我们想要的是,直接通过 esxi.example.org 就可以访问它。于是,我们需要 Nginx 在其中做一个转发的功能。在这个过程中遇到了很多的坑,最后终于是做好了 (VMware Remote Console等功能还不行,需要继续研究)。 首先讲讲为啥把 8443 换成 9443 不能工作吧 – 很简单,ESXi 的网页界面会请求 8443 端口。只是恰好我用 8443 转发到 443, 所以可以正常工作。这个很迷,但是测试的结果确实如此。VMware Remote Console 还用到了别的端口,我还在研究之中。 来谈谈怎么配置这个 Nginx 转发吧。首先是 80 跳转 443: server { listen 80; listen 8080; server_name esxi.example.org; return 301 https://$host$request_uri; } 这个很简单,接下来是转发 443 端口: server { listen 443 ssl; server_name esxi.

Read More

搭建 FTP server behind NAT

我们出现新的需求,要把以前的 FTP 服务器迁移到 NAT 之后的一台机器上。但是,FTP 不仅用到 20 21 端口, PASV 还会用到高端口,这给端口转发带来了一些麻烦。我们一开始测试,直接在 Router 上转发 20 和 21 端口到 Server 上。但是很快发现, Filezilla 通过 PASV 获取到地址为 (内网地址,端口高8位,端口低8位),然后,Filezilla 检测出这个地址是内网地址,于是转而向 router_ip:port 发包,这自然是不会得到结果的。 此时我们去网上找了找资料,找到了一个很粗暴的方法: iptables -A PREROUTING -i external_interface -p tcp -m tcp --dport 20 -j DNAT --to-destination internal_ip:20 iptables -A PREROUTING -i external_interface -p tcp -m tcp --dport 21 -j DNAT --to-destination internal_ip:21 iptables -A PREROUTING -i external_interface -p tcp -m tcp --dport 1024:65535 -j DNAT --to-destination internal_ip:1024-65535 有趣地是, macOS 自带的 ftp 命令(High Sierra似乎已经删去)可以正常使用。研究发现,它用 EPSV(Extended Passive Mode) 代替 PASV ,这里并没有写内网地址,因而可以正常使用。

Read More

使用 iptables 和策略路由进行带源地址的 forwarding

陈老师打开他的服务器,突然发现 CPU 莫名高负载,然后发现是有一个用户被远程登录拿来挖矿了。但是这台机器在 NAT 后,所以登录的源地址全是 NAT 路由,所以不知道对方的地址是什么。我们为了能使用 fail2ban 来禁用多次尝试失败的 IP ,但又不想因为别人把 NAT 路由的地址给禁了,这样我们自己也用不了了。所以必须要让这台机器能够知道 ssh 的源地址,我们现在简单的 socat 方案不能满足这个需求。 需求: 可以在外网连 NAT 路由的高端口(如2222)来访问这台机器。 在内网中,既可以直接连它的内网地址,也可以连 NAT 路由的高端口来访问这台服务器。此时,由于连 ssh 的机器就在同一个子网中,如果保留了源地址,服务器发的包会直接回来不经过 NAT 。所以我们还是保留了 socat 的方案。 实现方法: 在 NAT Router 上配置 DNAT ,这样发到 NAT Router 上的包就可以转发到服务器上: iptables -t nat -A PREROUTING -i external_interface -p tcp -m tcp --dport 2222 -j DNAT --to-destination internal_server_ip:22 但是,从服务器回来的包到了 NAT Router 上后,由于路由表的配置问题,默认的路由并不能把包送达对方。 方法1: 我们首先给包打上 mark: iptables -t mangle -A PREROUTING -i internal_interface -p tcp -m tcp --sport 22 -j MARK --set-mark 0x2222 然后配置策略路由:

Read More

利用 UPnP 协议进行 mosh NAT 穿透的研究

由于经常要从宿舍、教室等不同的 Wi-Fi 之间切换,但是 ssh 连接又总是断,所以想用 mosh 代替 ssh 。但是 mosh 也有它的问题: 不能滚动。这个可以在 mosh 中嵌套一层 tmux 解决。我目前写了一些自动 mosh 后打开 tmux 并且开启鼠标支持的脚本,但还是有缺陷。 在高端口 60000+ 监听 UDP ,这使得 NAT 后的服务器难以直接通过端口转发。如果直接转发到 NAT 后的机器,那么 NAT 后面如果有多台机器,这又失效了。 于是找了找网上的 NAT 穿透的一些文章,看到了 UPnP 的方法。大致就是,用户可以向路由器注册一个临时的转发规则,路由会自动在 iptables 上配置转发。但是,这样也会遇到一个问题:路由上的 mosh-server 不知道这个转发的存在,所以它可能会尝试监听同样的端口。解决方案下面会提到。 需求: Server <---> NAT Router <---> My Laptop On NAT Router, port 8022 is forwarded to Server:22 1. mosh router # works 2. mosh --ssh="ssh -p 8022" router # works 首先在 NAT Router 上配置 miniupnpd (以 Debian 为例)

Read More

在 Archlinux 上用 winbind 配合 pam 配置 Windows AD 认证登录

作为不清真的网络管理员,为了配置一套完整的统一认证系统,陈老师采用了 Windows AD 的方法给这里配置统一认证。重装了系统,自然要把之前的统一认证再配到新装的 Archlinux 上。 参考资料: Active Directory Integration 首先安装相应的包: pacman -S samba 我们还没有配好 Kerberos,所以跳过。 然后配置 /etc/samba/smb.conf ,以下是一个例子。可以根据文档微调。 [global] security = ads realm = YOUR-AD-HERE workgroup = YOUR-GROUP-HERE idmap uid = 10000-20000 idmap gid = 10000-20000 winbind enum users = yes winbind enum groups = yes template homedir = /home/%D/%U template shell = /bin/bash client use spnego = yes client ntlmv2 auth = yes encrypt passwords = yes winbind use default domain = yes restrict anonymous = 2 这样,域上的用户 user 会拿到 home 目录为 /home/YOUR-DOMAIN-HERE/user ,uid 在 10000-2000范围内的用户。在一会经过配置之后,可以通过 getent passwd 验证。

Read More

在服务器上安装 Archlinux 记录

有一台服务器的 Ubuntu 挂了,我们想在上面重装一个 Archlinux 。我们首先下载了 archlinux-2018.04.01 的 ISO, 直接 dd 到 U 盘上,但是遇到了问题。 首先遇到的问题是,一启动之后就会花屏。我们一开始怀疑是 NVIDIA 驱动的问题,于是想改 kernel param 但是发现,这个 ISO 是 hybrid 的,我们在 macOS 和 Windows 上都不能 mount 上这种类型的盘。于是我们选择自己搞分区表。我们把 U 盘插到电脑上,然后在 Linux 虚拟机内重新分区为 GPT ,然后 mount 到 /mnt/usb ,再重新下载 archlinux iso ,不过此时刚好上游更新了 archlinux-2018.05.01 的影响。我们把 ISO 中根分区 mount 到 /mnt/iso 上来,然后 cp -a /mnt/iso/* /mnt/usb 。调整了 grub 中的内核参数,仍然无果。我们认为问题可能在显卡上,就把那张显卡拔下来了,果然显示就正常了,但是新的问题就来了。 一启动, fstab 尝试把 LABEL=ARCHISO_201805 挂在上来,但是失败。于是我们把 U 盘插到 mac 上,用 Disk Utility 给分区命了名,再插回去,然后这个 Live CD 的 Systemd 就成功起来了。接下来就是根据官方的 Installation Guide 进行安装各种东西。安装完后,在 /boot/EFI 的操作上也出现了一些问题,一开始忘记调用 grub-mkconfig ,导致重启以后进入 grub-rescue ,所以又回到 Live CD 重新 grub-mkconfig 。同时对 systemd-networkd 也进行了相应的调整,这样开机以后可以配好网络。主要就是在网卡上配上两个 VLAN 和相应的 DHCP 和静态地址。

Read More

使用 Cisco AC + AP 组合搭建网络实践

有一台已配置好直接可用的 AC 在地址 ac-address 。我们需要搭建交换机 + AP 的网络,并且用一台 Linux 服务器进行 DHCP 从而给 AP 分发 AC 的地址。这里以 systemd-networkd 为例。 我们约定,vlan 2 上联外网, vlan 3 为 Linux 服务器和 AP 的内部网络。 接下来,配置交换机给 Linux 服务器的端口为 trunk 口,然后将下联 Cisco AP 的端口都设为 access vlan 3 模式。接下来在 Linux 服务器上配置 DHCP 服务器和 NAT 。 如果 Linux 服务器的 interface 名称为 eno1 : 配置两个 VLAN interface: $ cat /etc/systemd/network/eno1.network [Match] Name=eno1 [Network] VLAN=eno1.2 VLAN=eno1.3 相应添加 VLAN 配置: $ cat /etc/systemd/network/eno1.

Read More