我需要使用 tsocks(通过 ssh 隧道建立 ssh 连接以到达给定的机器),但有一个问题。有两台服务器具有相同的 IP 地址(我需要通过 ssh 隧道访问)。因此,这种情况的配置如下所示:
cat /etc/tsocks.conf
path {
reaches = 10.1.1.2/255.255.255.255
server = 127.0.0.1
server_port = 3000
}
path {
reaches = 10.1.1.2/255.255.255.255
server = 127.0.0.1
server_port = 2000
}
我该如何解决这个问题?
答案1
您需要两个tsocks.conf
,每个 SOCKS 服务器一个,然后将它们用作:
TSOCKS_CONF_FILE=~/.tsocks-A.conf tsocks some-cmd 10.1.1.2
和
TSOCKS_CONF_FILE=~/.tsocks-B.conf tsocks some-cmd 10.1.1.2
或者,如果 SOCKS 服务器支持 SOCKS4A 或 SOCKS5,则可以使用dante
'socksify
代替tsocks
并使用主机名(如果它们在远程端具有不同的主机名)(并根据 中的主机名或域名指定要使用的 SOCKS 服务器dante.conf
)。
答案2
首先,您可以通过 SSH 配置文件完成所有操作。如果您只是通过 SSH 连接到终端计算机,则尤其如此。请参阅SSH 多跳配置。通过正确建立 SSH 配置,您只需分配目标名称并键入ssh servera
或ssh serverb
,而不必设置 SSH 隧道然后键入tsocks ssh servera
。
tsocks确实无法区分你想要什么。一种方法是设置两个配置文件并发出命令来交换每个网络的配置
例如:
$ chmod +x /usr/local/bin/tsocksa.sh
$ cat /usr/local/bin/tsocksa.sh
#!/bin/bash
#
#Swaps for Network A
#See /etc/tsocs.conf.main and /etc/tsocks.conf.dest_a
#
sudo cat /etc/tsocks.conf{.main,.dest_a} > /etc/tsocks.conf
和
$ chmod +x /usr/local/bin/tsockss.sh
$ cat /usr/local/bin/tsockss.sh
#!/bin/bash
#
#Swaps for Network S
#See /etc/tsocks.conf.main and /etc/tsocks.conf.dest_s
#
sudo cat /etc/tsocks.conf{.main,.dest_s} > /etc/tsocks.conf
现在您可以将网络交换特定命令放入/etc/tsocks.conf.dest_n
并将通用网络放入/etc/tsocks.conf.master
您还可以对相同的命令使用 Bash 别名,或者进一步将 Bash 脚本简化为可以在 bashrc 中获取的函数。