SOCKS

RouterOS 中的 SOCKS 代理服务器:启用服务器、通过访问列表限制使用者、使用用户认证客户端,并监控活动的代理连接。

SOCKS

SOCKS 是用于 TCP 连接的代理协议。支持 SOCKS 的应用连接到代理,指明目标地址,代理建立连接并中继数据。由于连接由代理建立,能够访问代理的应用便可使用原本被防火墙规则阻止的目标,同时你可以在一处控制允许的客户端与目标。SOCKS 适用于任何基于 TCP 的协议,例如 HTTP、FTP 或 SSH。

RouterOS 内置 SOCKS 服务器(位于 /ip/socks,即本页),以及用于反方向的 Socksify 服务:将防火墙规则选中的流量通过上游 SOCKS 服务器转发。

启用服务器

服务器默认禁用。设置协议 version 并启用:

/ip/socks/set version=5 enabled=yes

默认 version=4 仅接受 SOCKS4 客户端,SOCKS5 客户端会被拒绝。SOCKS5 客户端请选择 5;密码认证也要求版本 5。

使用这些设置后,服务器会在路由器所有地址的 TCP 端口 1080 上监听。在添加访问列表规则之前,任何能访问该端口的人都可以使用代理。

访问列表

子菜单: /ip/socks/access

访问列表控制服务器接受哪些请求。规则按顺序检查,第一条匹配规则决定结果。未匹配任何规则的请求会被 允许;空列表允许所有请求。要建立限制性列表,请在末尾添加一条 deny 规则:

/ip/socks/access/add src-address=192.168.0.0/24 action=allow
/ip/socks/access/add action=deny

除地址与端口外,dst-address 还接受域名,此时仅匹配按名称请求该目标的客户端。

警告

请通过访问列表或防火墙规则保护代理。开放的 SOCKS 代理会让任何人通过路由器转发连接,例如滥用它发送垃圾邮件。

用户与认证

子菜单: /ip/socks/users

使用 /ip/socks/set auth-method=password 后,客户端必须使用列表中用户的用户名与密码认证;不存在用户时连接会被拒绝。认证使用 SOCKS5 用户名/密码方式:

/ip/socks/set version=5 auth-method=password
/ip/socks/users/add name=alice password=s3cret

新用户创建后默认启用。print 输出中不会显示密码:

[admin@MikroTik] /ip/socks/users> print
Columns: NAME, ONLY-ONE
# NAME      ONLY-ONE
0 alice     no

监控连接

子菜单: /ip/socks/connections

该只读列表显示服务器当前中继的连接,包含客户端地址、请求的目标与字节计数。user 列显示已认证用户(如有):

[admin@MikroTik] /ip/socks/connections> print detail
0  src-address=192.168.0.2:59264 dst-address=198.51.100.8:21 type=out
   tx=103 rx=737 user=alice

应用示例:通过 SOCKS 服务器访问 FTP

你的网络 192.168.0.0/24 通过具有地址 203.0.113.104 与 192.168.0.1 的路由器进行伪装,且防火墙阻止直接 FTP 访问:

[admin@MikroTik] /ip/firewall/nat> print
0   chain=srcnat action=masquerade src-address=192.168.0.0/24
[admin@MikroTik] /ip/firewall/filter> print
0   chain=forward action=drop protocol=tcp src-address=192.168.0.0/24
    dst-port=21

要允许客户端 192.168.0.2 通过代理访问 198.51.100.8 的 FTP 服务器,请启用服务器并添加访问规则:允许客户端连接 FTP 服务器的 21 端口并打开被动数据连接(高位端口),然后拒绝其他所有请求:

[admin@MikroTik] /ip/socks> set enabled=yes version=5
[admin@MikroTik] /ip/socks> print
                  enabled: yes
                     port: 1080
  connection-idle-timeout: 2m
          max-connections: 200
                      vrf: main
                  version: 5
              auth-method: none
[admin@MikroTik] /ip/socks> access/add src-address=192.168.0.2 dst-address=198.51.100.8 dst-port=21 action=allow
[admin@MikroTik] /ip/socks> access/add src-address=192.168.0.2 dst-address=198.51.100.8 dst-port=1024-65535 action=allow
[admin@MikroTik] /ip/socks> access/add action=deny
[admin@MikroTik] /ip/socks> access/print
0   src-address=192.168.0.2 dst-address=198.51.100.8 dst-port=21 action=allow

1   src-address=192.168.0.2 dst-address=198.51.100.8 dst-port=1024-65535 action=allow

2   action=deny

传输进行期间,控制连接与被动数据连接会显示在上一节所述的连接列表中。

请将 FTP 客户端配置为使用 SOCKS,服务器地址为路由器地址 192.168.0.1,TCP 端口为 1080。