Linux内核TCP网络参数.md
1 | sudo vim /etc/sysctl.d/99-sysctl.conf: #重启后生效 |
1 | sudo vim /etc/security/limits.conf: |
1 | sudo vim /etc/sysctl.d/99-sysctl.conf: #重启后生效 |
1 | sudo vim /etc/security/limits.conf: |
netfilter/iptables 为 Linux 内核级有状态防火墙。支持连接跟踪,包含四种有效状态:ESTABLISHED、INVALID、NEW、RELATED。
whereis iptablesapt-get install iptablesmodprobe ip_tables编辑策略文件:vi /etc/iptables.rules
1 | *filter |
[!NOTE]
INPUT 为入口,OUTPUT 为出口,REJECT 为禁止。若需完全开放出口,将默认策略改为-A OUTPUT -j ACCEPT。
iptables-restore < /etc/iptables.rulesiptables -L -nln -s /lib/systemd/system/rc-local.service /etc/systemd/system/vi /lib/systemd/system/rc-local.service,末尾追加 [Install] 段vi /etc/rc.local,写入 iptables-restore < /etc/iptables.ruleschmod +x /etc/rc.local1 | # 查看现有规则 |
1 | # 开放常用端口 |
1 | # 设置默认策略 |
1 | service iptables save |
| 链 | 方向 | 说明 |
|---|---|---|
| INPUT | 入站 | 目标为本机的数据包 |
| OUTPUT | 出站 | 源为本机的数据包 |
| FORWARD | 转发 | 经本机路由转发的数据包 |
| 状态 | 说明 |
|---|---|
| ESTABLISHED | 已建立的连接 |
| NEW | 新连接请求 |
| RELATED | 与已有连接关联的数据包 |
| INVALID | 无法识别或无效的数据包 |
TDengine 是一款开源、高性能、云原生的时序数据库(Time Series Database, TSDB),专为物联网、车联网、工业互联网、金融、IT 运维监控等场景设计。
taosd: 数据库核心服务。taosAdapter: 提供 RESTful 和 WebSocket 接口。taosKeeper: 系统监控指标收集。taosExplorer: Web 管理控制台。创建 docker-compose.yml 文件:
1 | version: '3.9' |
启动服务:docker-compose up -d
1 | docker exec -it tdengine bash |
1 | taosBenchmark -y |
test 数据库下创建一张名为 meters 的超级表,包含 10,000 张子表,每表 10,000 条记录。1 | taos |
1 | -- 在 taos 提示符下执行 |
1 | ALTER USER root PASS 'YourNewPassword'; |
1 | taos -uroot -pYourNewPassword |
http://<服务器IP>:6060,使用数据库用户名密码登录 taosExplorer 进行可视化管理。假设使用 3 台服务器,所有节点均部署 TDengine。
| 服务器 | IP 地址 | 部署服务 | 对外代理端口 (Nginx) |
|---|---|---|---|
| node0 | 192.168.4.211 | TDengine | - |
| node1 | 192.168.4.115 | TDengine | - |
| node2 | 192.168.0.37 | TDengine, Nginx | 16041, 16043, 16060 |
端口说明:每个 TDengine 容器需开放与单节点相同的端口(6030, 6041, 6043, 6060, 6044-6049)。
(1)所有节点:准备配置文件
1 | # 1. 启动临时容器获取默认配置 |
(2)所有节点:配置集群首个节点 (firstEp)
编辑 conf/taos.cfg 文件,所有节点的此配置必须相同。
1 | # 指向规划中第一个启动的节点(例如 node0) |
(3)所有节点:启动 TDengine 服务
创建 docker-compose.yml,使用 host 网络模式以便节点间通信。
1 | version: '3.9' |
启动:docker-compose up -d
启动顺序建议:先启动 firstEp 指向的节点(node0),再启动其他节点。
1 | docker exec -it tdengine taos |
1 | SHOW DNODES; |
status 为 ready 的节点。1 | -- 在 dnode 2 (node1) 上创建第二个 Mnode |
leader 和一个 follower Mnode。在 node2 上部署 Nginx,对外提供统一的访问入口,实现 taosAdapter (REST API)、taosKeeper (监控) 和 taosExplorer (Web) 的负载均衡。
nginx.conf)1 | user root; |
创建 docker-compose-nginx.yml:
1 | version: '3.9' |
启动:docker-compose -f docker-compose-nginx.yml up -d
通过 Nginx 代理访问 REST API:
1 | curl -L 'http://192.168.0.37:16041/rest/sql/test' \ |
应返回包含测试数据的 JSON 响应。
host 网络或确保容器间在 6030-6049 端口上能直接通信。/var/lib/taos 目录以防止数据丢失。firstEp**:此配置是集群组建的关键,必须正确且一致。将 OpenCV 处理后的图像直接进行 RTSP 推流,支持多种实现方案。
1 | gst-launch-1.0 filesrc location=D:\5.mp4 ! decodebin ! videoconvert ! x264enc ! rtspclientsink location=rtsp://127.0.0.1:8554/live |
1 | gst-launch-1.0 rtspsrc location=rtsp://127.0.0.1:8554/live ! rtph264depay ! h264parse ! avdec_h264 ! autovideosink |
1 | #include <gst/gst.h> |
| 步骤 | 操作 |
|---|---|
| 1 | 初始化 GStreamer |
| 2 | 创建管道和元素(appsrc → videoconvert → x264enc → rtph264pay → rtspclientsink) |
| 3 | 配置 appsrc 参数(分辨率、帧率、格式) |
| 4 | 启动管道 |
| 5 | 循环读取摄像头帧并推送 |
1 | #include "rtspencoder.h" |
1 | RTSPEncoder::RTSPEncoder(const char* rtspUrl, int outputWidth, int outputHeight, QObject* parent) |
1 | int RTSPEncoder::initialize() |
1 | void RTSPEncoder::encodeFrameAndSend() |
1 | void RTSPEncoder::AddFrame(cv::Mat& imGBR, int nFrame) |
1 | void RTSPEncoder::cleanup() |
1 | void push() |
| 方案 | 优点 | 缺点 |
|---|---|---|
| GStreamer | 灵活性高,延迟低 | 代码复杂 |
| FFmpeg | 功能强大,兼容性好 | 学习成本高 |
| OpenCV GStreamer | 实现简单 | 延迟较高 |
1 | int main1() |
1 | # 文件推流 |
| 方案 | 适用场景 |
|---|---|
| GStreamer | 低延迟、高性能推流 |
| FFmpeg | 复杂编码需求、跨平台 |
| OpenCV GStreamer | 简单场景、快速实现 |
本文档整合了多种SOCKS5代理服务器的搭建方法,包括SS5、Dante、Squid和Microsocks,旨在为不同需求和场景提供选择。
| 方案 | 特点 | 适用场景 | 复杂度 |
|---|---|---|---|
| SS5 | 经典SOCKS5服务器,功能全面,支持用户认证。 | 需要稳定、功能完整的SOCKS5代理。 | 中等 |
| Dante | 轻量级、高性能的SOCKS4/5服务器,配置灵活。 | 对性能和资源占用有要求的生产环境。 | 中等 |
| Squid | 功能强大的HTTP/HTTPS缓存代理,也支持SOCKS。 | 主要需求为Web缓存,同时需要SOCKS功能。 | 较高 |
| Microsocks | 极致轻量、内存占用极小的SOCKS5服务器。 | 资源受限的VPS、临时或简单代理需求。 | 低 |
环境建议:CentOS 7.x, Debian 7+, Ubuntu 14.04+。避免使用CentOS 8.x(兼容性问题)。确保服务器防火墙/安全组已开放代理端口。
SS5是一个功能完整的SOCKS5代理服务器。
1. 安装依赖与源码
1 | yum -y install gcc gcc-c++ automake make pam-devel openldap-devel cyrus-sasl-devel openssl openssl-devel |
2. 服务注册与自启
1 | chmod +x /etc/init.d/ss5 |
3. 核心配置
/etc/opt/ss5/ss5.conf):1 | auth 0.0.0.0/0 - u |
/etc/opt/ss5/ss5.passwd):1 | username password |
/etc/sysconfig/ss5):1 | SS5_OPTS=" -u root -b 0.0.0.0:8899" |
4. 启动与测试
1 | service ss5 start # 或 restart |
使用Proxifier等客户端工具,配置代理服务器地址和端口进行连接测试。
Dante是一个高效、配置灵活的SOCKS服务器。
1. 安装 (CentOS 7)
1 | rpm -Uvh http://mirror.ghettoforge.org/distributions/gf/gf-release-latest.gf.el7.noarch.rpm |
2. 基础配置 (/etc/sockd.conf)
以下是一个允许所有连接(无认证)的简单配置:
1 | errorlog: /var/log/sockd.errlog |
注意:需创建日志目录 mkdir /var/run/sockd。
3. 启动与管理
1 | systemctl start sockd |
4. 高级配置
method: none 改为 method: username,并使用系统用户登录。client pass 和 socks pass 块中,通过 from: / to: 字段精细控制源IP和目标地址。Squid主要用作HTTP代理,但也可配置为SOCKS代理,并支持强大的访问控制。
1. 安装
1 | sudo apt-get install squid -y # Ubuntu/Debian |
2. 基础正向代理配置
/etc/squid/squid.conf,添加允许的客户端网段:1 | acl localnet src 172.28.0.0/16 |
/etc/squid/conf.d/debian.conf 中取消注释:1 | http_access allow localnet |
sudo service squid restart3. 强大的访问控制示例 (在squid.conf中配置)
1 | # 1. 禁止特定IP |
4. 透明代理配置 (需双网卡)
squid.conf 中添加拦截端口。1 | http_port 3129 intercept # HTTP透明代理 |
1 | openssl req -new -newkey rsa:4096 -sha256 -days 3650 -nodes -x509 -keyout myCA.pem -out myCA.pem |
适用于内存资源紧张的VPS。
1. 安装
sudo apt install microsocks1 | wget http://ftp.barfooze.de/pub/sabotage/tarballs/microsocks-1.0.4.tar.xz |
2. 直接运行
1 | microsocks -1 -u USERNAME -P PASSWORD |
-1: 认证一次后IP加入白名单。-u / -P: 用户名和密码。0.0.0.0:1080。3. 配置为Systemd服务 (推荐)
/etc/systemd/system/microsocks.service。/etc/microsocks.conf,定义 MICROSOCKS_LOGIN 和 MICROSOCKS_PASSW。sudo systemctl enable --now microsocks1 | curl --socks5 USER:PASS@SERVER_IP:PORT https://www.google.com/ |
1 | export http_proxy=socks5://SERVER_IP:PORT |
systemctl status xxx)。journalctl -xe, /var/log/xxx.log)。squid-openssl,正确生成并配置了CA证书,且客户端已导入该证书。请根据您的具体需求(性能、功能、易用性、资源占用)选择最合适的方案进行部署。
在 Podman Desktop 设置中启用 **Experimental (Docker Compatibility)**:
1 | # 启用后即可使用 docker CLI 语法 |
因未安装 Docker Desktop,需通过 winget 独立安装:
1 | PS C:\> winget install Docker.DockerCLI |
安装完成后重启 PowerShell,验证连接:
1 | PS C:\> docker version |
1 | # 拉取镜像 |
创建 ASP.NET Core MVC 项目并启用容器支持,确认:
| 项目 | 说明 |
|---|---|
| Podman Desktop | Windows 环境运行 WSL2,后端为 podman-machine |
| Docker CLI Context | npipe:////./pipe/docker_engine 与 Podman 通信 |
| Experimental Compatibility | 启用后 docker CLI 可兼容操作 Podman |
| 独立 Docker CLI | 通过 winget 安装 Docker.DockerCLI 包 |
本文使用阿里云 ECS 服务器(香港节点,CentOS 7.9 64位)进行演示。学生用户可通过阿里云学生计划免费领取服务器。
重要信息记录:
1 | sudo yum update -y |
1 | sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo |
1 | sudo yum install -y docker-ce docker-ce-cli containerd.io |
1 | sudo systemctl start docker |
1 | # 查看 Docker 版本 |
验证成功标志:能看到 hello-world 镜像拉取成功并运行。
1 | mkdir -p /vpn |
创建并编辑 .env 文件:
1 | nano /vpn/.env |
将以下配置粘贴到 .env 文件中,根据实际情况修改:
1 | # IPsec 预共享密钥(重要!) |
配置说明:
VPN_PUBLIC_IP:必须替换为你的服务器公网 IPVPN_IPSEC_PSK:建议使用强密码,包含大小写字母、数字和特殊字符1 | docker run \ |
如果出现错误提示需要特权模式,按以下步骤操作:
停止并删除现有容器:
1 | docker stop ipsec-vpn-server |
重新以特权模式运行:
1 | docker run \ |
1 | # 查看容器运行状态 |
成功标志:日志中显示 IPsec VPN server started 或类似信息。
VPN 服务需要以下 UDP 端口:
1 | # 开放 UDP 500 端口 |
以阿里云为例:
| 授权策略 | 协议类型 | 端口范围 | 授权对象 | 描述 |
|---|---|---|---|---|
| 允许 | UDP | 500/500 | 0.0.0.0/0 | IPsec ISAKMP |
| 允许 | UDP | 4500/4500 | 0.0.0.0/0 | IPsec NAT-T |
| 允许 | UDP | 1701/1701 | 0.0.0.0/0 | L2TP(可选) |
1 | docker restart ipsec-vpn-server |
.env 文件中的 VPN_IPSEC_PSK.env 文件中的 VPN_USER.env 文件中的 VPN_PASSWORD以管理员身份打开 PowerShell 或命令提示符,执行:
1 | REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 0x2 /f |
.env 文件中的 VPN_IPSEC_PSK.env 文件中的 VPN_USER.env 文件中的 VPN_PASSWORD解决:使用 --privileged 参数重新运行容器(见3.2节)
检查步骤:
1 | docker logs ipsec-vpn-server |
解决:
检查:
1 | echo 1 > /proc/sys/net/ipv4/ip_forward |
1 | # 查看容器实时日志 |
1 | # 备份 .env 配置文件 |
通过以上步骤,你已成功在 CentOS 7 服务器上使用 Docker 搭建了 IPsec VPN 服务器。关键要点:
.env 文件中的公网 IP 必须准确优势:
后续维护:
现在你可以安全地通过 VPN 访问你的服务器资源,或用于保护公共 Wi-Fi 下的网络通信。
Android中的SlidingMenu组件允许用户通过侧滑来展示或隐藏侧边栏,通常用于导航选项或额外功能的展示。
核心特性:
虽然新材料倾向于使用NavigationView,SlidingMenu仍然在旧版本或需要定制的项目中有其应用价值。
在 build.gradle 中添加:
1 | dependencies { |
1 | <com.jeremyfeinstein.slidingmenu.lib.SlidingMenu |
1 | public class MainActivity extends SlidingFragmentActivity { |
| 方法 | 说明 |
|---|---|
setMenuWidth(int) |
设置菜单宽度 |
setShadowWidthRes(int) |
设置阴影宽度 |
setShadowDrawable(int) |
设置阴影图片 |
setTouchModeAbove(int) |
设置触摸模式 |
setFadeDegree(float) |
设置渐变程度 |
1 | // 仅在菜单显示时允许滑动 |
1 | // 左侧滑动 |
1 | public class MenuFragment extends Fragment { |
1 | // 在Activity中加载菜单Fragment |
1 | <RelativeLayout |
| 模式 | 说明 |
|---|---|
SLIDING_CONTENT_ONLY |
仅内容区域滑动 |
SLIDING_WINDOW |
整个窗口滑动 |
SLIDING_CONTENT_FLIPPED |
内容区域翻转 |
1 | // 切换到内容滑动模式 |
1 | slidingMenu.setOnOpenListener(new SlidingMenu.OnOpenListener() { |
1 | view.setOnTouchListener(new View.OnTouchListener() { |
| 方法 | 说明 |
|---|---|
dispatchTouchEvent |
事件分发 |
onInterceptTouchEvent |
事件拦截 |
onTouchEvent |
事件处理 |
1 | // 透明度动画 |
1 | AnimationSet animationSet = new AnimationSet(true); |
| 问题 | 解决方案 |
|---|---|
| 菜单与内容不同步 | 确保Fragment生命周期同步 |
| 滑动卡顿 | 优化布局层级,减少复杂视图 |
| 阴影不显示 | 检查阴影资源文件是否存在 |
推荐参考 zhy_slidemenu_demo 示例项目,学习不同场景下的SlidingMenu使用方式。
SlidingMenu是Android实现侧滑菜单的经典方案,通过本文可掌握:
适用于需要侧滑导航的Android应用开发场景。