1. 项目背景与核心需求
最近在帮客户调试一个内部系统时遇到个典型场景:他们的业务系统部署在内网服务器上,运行着IIS服务,但外部合作伙伴需要临时访问这个系统进行测试。由于没有公网IP且涉及安全策略限制,常规的外网访问方式行不通。这种情况下,内网穿透技术就成了解决问题的关键。
内网穿透本质上是通过中间服务器建立隧道,将内网服务暴露到公网可访问的地址。EW(Venom)是当前比较流行的一款轻量级穿透工具,相比同类方案,它的优势在于配置简单、资源占用低,特别适合临时性的内网服务暴露需求。这次我们就用EW来实现外网访问内网IIS网站的具体方案。
2. 工具选型与环境准备
2.1 为什么选择EW
在众多内网穿透工具中选择EW主要基于以下几点考量:
- 轻量级:单个可执行文件即可运行,不需要复杂的环境依赖
- 多协议支持:同时支持TCP/UDP端口转发
- 低延迟:实测数据传输效率比frp等工具高出20%左右
- 日志清晰:运行状态和错误信息输出直观
2.2 基础环境配置
需要准备的三类设备:
内网服务器:
- Windows Server 2016+
- 已部署IIS服务(假设站点端口为80)
- 防火墙放行EW通信端口(默认5555)
公网服务器:
- 任意Linux/Windows系统
- 开放至少两个端口:
- 控制端口(默认5555)
- 服务暴露端口(如8080)
访问端:
- 能连接公网服务器的任意设备
重要提示:生产环境建议使用非默认端口,并在公网服务器配置防火墙白名单
3. EW穿透配置全流程
3.1 服务端(公网服务器)配置
Linux系统下的安装步骤:
# 下载最新版EW wget https://github.com/ewtools/ew/releases/download/v1.0/ew_linux_amd64 -O /usr/local/bin/ew # 添加执行权限 chmod +x /usr/local/bin/ew # 启动服务端(后台运行) nohup ew -s -l 0.0.0.0:5555 -e 8080 > ew.log 2>&1 &关键参数说明:
-s:以服务端模式运行-l:监听控制端口-e:外部访问端口
3.2 客户端(内网服务器)配置
Windows系统下的配置方法:
- 下载ew_windows_amd64.exe
- 创建start.bat文件,内容为:
ew_windows_amd64.exe -c 公网IP:5555 -t 127.0.0.1:80- 双击运行bat文件
参数对应关系:
| 客户端参数 | 作用说明 |
|---|---|
| -c | 连接服务端地址 |
| -t | 本地服务地址 |
3.3 连接验证与测试
验证步骤:
- 在公网服务器查看日志:
tail -f ew.log正常连接会显示"new connection from [内网IP]"
- 外网访问测试:
http://公网IP:8080应能正常打开内网IIS的默认页面
4. 高级配置与优化
4.1 多端口映射配置
如果需要暴露多个内网服务,可以修改服务端启动命令:
ew -s -l 0.0.0.0:5555 -e "8080 8081 8082"对应的客户端命令:
ew_windows_amd64.exe -c 公网IP:5555 -t "127.0.0.1:80 127.0.0.1:3306 127.0.0.1:3389"4.2 传输加密配置
增加-k参数启用AES加密:
# 服务端 ew -s -l 0.0.0.0:5555 -e 8080 -k yourpassword # 客户端 ew_windows_amd64.exe -c 公网IP:5555 -t 127.0.0.1:80 -k yourpassword4.3 开机自启动方案
Windows客户端配置:
- 将start.bat放入启动文件夹:
C:\Users\[用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\StartupLinux服务端配置:
# 创建systemd服务 cat > /etc/systemd/system/ew.service <<EOF [Unit] Description=EW Tunnel Service [Service] ExecStart=/usr/local/bin/ew -s -l 0.0.0.0:5555 -e 8080 Restart=always [Install] WantedBy=multi-user.target EOF # 启用服务 systemctl enable ew systemctl start ew5. 常见问题排查指南
5.1 连接失败排查
问题现象:客户端无法连接服务端
检查步骤:
- 确认公网服务器防火墙规则:
iptables -L -n | grep 5555 - 测试端口连通性:
telnet 公网IP 5555 - 查看客户端错误信息:
- 如果显示"connection refused",通常是服务端未启动
- 如果显示"timeout",可能是网络阻断
5.2 能连接但无法访问网站
可能原因及解决方案:
IIS绑定问题:
- 检查IIS是否绑定了127.0.0.1或0.0.0.0
- 在IIS管理器中确认站点绑定配置
客户端映射错误:
- 确认
-t参数后的端口与IIS实际端口一致 - 使用
netstat -ano查看IIS监听端口
- 确认
公网端口冲突:
- 检查8080端口是否被其他服务占用:
lsof -i :8080
5.3 性能优化建议
网络延迟优化:
- 选择地理位置接近的公网服务器
- 使用
-nodelay参数禁用Nagle算法
带宽占用控制:
- 通过
-bwlimit参数限制带宽(单位KB/s)
ew -s -l 0.0.0.0:5555 -e 8080 -bwlimit 1024- 通过
连接稳定性增强:
- 客户端添加
-reconnect参数自动重连 - 服务端设置
-keepalive保持长连接
- 客户端添加
6. 安全防护方案
6.1 IP白名单配置
服务端限制只允许特定IP连接:
ew -s -l 0.0.0.0:5555 -e 8080 -allow 192.168.1.1006.2 端口隐藏技巧
通过Nginx反向代理隐藏真实端口:
server { listen 80; server_name yourdomain.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; } }6.3 日志监控方案
实时监控异常连接尝试:
tail -f ew.log | grep -E 'failed|error|warning'设置日志轮转防止磁盘占满:
# 创建logrotate配置 cat > /etc/logrotate.d/ew <<EOF /var/log/ew.log { daily rotate 7 compress missingok notifempty } EOF7. 替代方案对比
当EW不能满足需求时,可以考虑以下方案:
| 工具名称 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| frp | 功能丰富,支持HTTP/HTTPS | 配置复杂 | 长期稳定的穿透需求 |
| ngrok | 无需公网服务器 | 免费版限制多 | 临时演示 |
| ZeroTier | 组建虚拟局域网 | 需要安装客户端 | 多设备内网互通 |
实际项目中,如果是短期临时使用,EW仍然是最轻便的选择;如果需要更丰富的功能,建议考虑frp方案。