需求
在两台搭载ubuntu的服务器A,B间搭一个跳板,实现A上所有TCP流量由B转发。
实现方法
在服务器A上与B建立起SSH隧道,指定转发端口p,然后用iptables将所有TCP流量转发到redsocks的侦听端口,再由redsocks转到端口p发出。
SSH
SSH(Secure Shell)是一种加密网络传输协议,可在不安全的网络中提供安全传输。
安装
类Unix系统自带ssh命令,Windows下可用Putty等工具代替。
SSH隧道
ssh端口转发在两台主机之间搭建了一个数据传输的安全隧道,因此也被称为ssh隧道。ssh端口转发有三种模式:本地端口转发、远程端口转发、动态端口转发。具体内容可参考这篇玩转SSH端口转发。
在这里使用SSH的动态端口转发,指定本地端口11223.
1 | 将A上经过11223端口的流量由B转发 |
接下来就只需要想办法让A上所有TCP流量都由11223端口出去。
iptables
iptables是用于配置Linux内核防火墙的命令行工具,它可以按规则检测、修改、转发、重定向和丢弃IPv4数据包。iptables规则主要由表和链组成,这里)有详细介绍。
规则
这里使用iptables把tcp流量全部转发到redsocks的侦听端口11111上(udp等也可以,我没有配置)。
1 | # 在nat表上新建REDSOCKS链 |
redsocks
redsocks是一个开源TCP重定向工具,它的github地址在这里。
安装
1 | sudo apt-get update |
启动服务
1 | service redsocks start |
配置
redsocks在ubuntu下的配置文件路径为/etc/redsocks.conf
。
我的配置文件如下,只配置了tcp:
1 | base { |
一键脚本
一键才是最棒的。这个脚本参考了liruqi的博客文章 使用 redsocks 作强制的系统全局代理。
1 | #! /bin/bash |
其他
1、建立使用tor的ssh:在两端安装并启动tor服务后,使用封装好的torify命令发起ssh请求即可。参考SSH over Tor。
2、一个未解疑问:为什么我直接使用iptables转发到ssh隧道端口就不行呢…