iptables端口转发经常会出现一些问题,导致无法使用,而haproxy又不支持转发udp。所以如果你要转发一个或几个端口的话就推荐这个工具:socat 。
socat不支持端口段转发,只适用于单端口或者少量端口。
Socat:
优点:支持 TCP/UDP 转发。缺点:不支持端口段(多个端口需要开启多个转发)
HaProxy:
优点:支持 TCP 转发,支持 端口段 转发。缺点:不支持 UDP 转发。
iptables:
优点:支持 TCP/UDP 转发,支持 端口段 转发。缺点:配置麻烦,容易出错。
这时候你的 Shadowsocks客户端 填写信息的时候 IP 就是
所以原理就是:
Shadowsocks客户端通过
Centos系统:
chmod +x /etc/rc.local
vi /etc/rc.local
输入
然后再 按
----------
用 iptables 经常不成功, haproxy 又不能转发 udp 。那么如果你只有少数几个端口要转发的话,还有一个便利的工具就是 socat 。 socat 唯一麻烦的地方就是好像我没找到如何转发端口段,只能一个命令一个端口。。。不过如果只是自用转发少量端口的话还是蛮好用的。
socat 安装
socat 的安装也很简单,一般直接 yum ( centos )或者 apt-get ( ubuntu , debian )就能装:
yum install -y socat
apt-get update
apt-get install -y socat
socat 的使用
转发 TCP:
nohup socat TCP4-LISTEN:30000,reuseaddr,fork TCP4:1.1.1.1:30000 >> socat.log 2>&1 &
nohup socat TCP4-LISTEN:30000,reuseaddr,fork TCP4:1.1.1.1:30000 >> socat.log 2>&1 &
说明:
TCP4-LISTEN:10000 监听 ipv4 的 10000TCP 端口。 10000 改成你自己需要转发的端口
fork TCP4:1.1.1.1:10000 转发到 1.1.1.1 的 10000 端口,根据需求修改自行修改 ip 和端口
nohup 后台运行。可以把这个命令写到 /etc/rc.local 里面开机启动启动。
转发 UDP
nohup socat -T 600 UDP4-LISTEN:10000,reuseaddr,fork UDP4:1.1.1.1:10000 >> socat.log 2>&1 &
nohup socat -T 600 UDP4-LISTEN:10000,reuseaddr,fork UDP4:1.1.1.1:10000 >> socat.log 2>&1 &
很方便吧 。。把 tcp 改成 udp 就是转发 udp 了。。。。说明如上。也可以直接写到 /etc/local 里面开机自动启动。。
可见,如果你只有一个端口要转发,那么 socat 好像比较方便呢。
socat不支持端口段转发,只适用于单端口或者少量端口。
Socat:
优点:支持 TCP/UDP 转发。缺点:不支持端口段(多个端口需要开启多个转发)
HaProxy:
优点:支持 TCP 转发,支持 端口段 转发。缺点:不支持 UDP 转发。
iptables:
优点:支持 TCP/UDP 转发,支持 端口段 转发。缺点:配置麻烦,容易出错。
Socat安装
Centos 系统:Debian/Ubuntu 系统:
- yum install -y socat
- apt-get update
- apt-get install -y socat
Socat使用
转发TCP
- nohup socat TCP4-LISTEN:2333,reuseaddr,fork TCP4:233.233.233.233:6666 >> /root/socat.log 2>&1 &
nohup
指的是 后台运行。TCP4-LISTEN:2333
指的是 监听ipv4的端口,也就是 转发的端口,后面Shadowsocks链接中继时填写的 端口。fork TCP4:233.233.233.233:6666
指的是 被转发的 IP 和 端口,也就是你要中继的服务器的 IP 和 端口。注意:这里的 中继端口(2333) 和 被中继端口(6666) 是可以一样的,我区分开只是为了让你们更好地理解。
/root/socat.log 2>&1 &
指的是 转发日志记录。转发UDP
转发UDP很简单,只要把
- nohup socat UDP4-LISTEN:2333,reuseaddr,fork UDP4:233.233.233.233:6666 >> /root/socat.log 2>&1 &
TCP4
改成 UDP4
就行了!停止转发
- ps -ef | grep socat
- #输入上面的命令找到socat程序的PID,然后用下面的命令KILL掉这个PID进程(PID是个数字,自己替换下面的"pid")。
- kill -9 pid
Socat卸载
Centos系统:Debian/Ubuntu系统:
- yum remove socat
- sudo apt-get remove socat
- sudo apt-get autoremove
简单解释
注意:假设你的中继服务器也就是现在在操作的服务器 IP 是 1.1.1.1
,那么你的 中继端口 就是 2333
。你的 被中继服务器的 IP 是 233.233.233.233
,端口是 6666
。这时候你的 Shadowsocks客户端 填写信息的时候 IP 就是
1.1.1.1
,端口 就是 2333
。所以原理就是:
Shadowsocks客户端通过
1.1.1.1:2333
链接中继服务器 1.1.1.1
,然后中继服务器把端口 2333
的流量转发到 被中继服务器 233.233.233.233
的端口 6666
上面。然后 被中继服务器 也就是上面的 Shadowsocks服务端,就会去访问你要的数据,然后依次返回 中继服务器 -> Shadowsocks客户端。防火墙设置
如果你设置后无法链接,那么多半是防火墙 阻拦了,只要开放端口 就行了。以上面的 示例的中继端口 2333
为例。
- iptables -I INPUT -p tcp --dport 2333 -j ACCEPT
- iptables -I INPUT -p udp --dport 2333 -j ACCEPT
如果上面的命令提示没有这个 服务,那么加上sudo(
- service iptables save
- # 保存防火墙
- service iptables restart
- # 重启防火墙
sudo service iptables save
/ sudo service iptables restart
)试试或者下面这个。
- /etc/init.d/iptables save
- /etc/init.d/iptables restart
开机启动
因为这个工具并没有开机启动的设定,所以需要设置系统的开机启动。Centos系统:
Ubuntu/Debian系统:
- chmod +x /etc/rc.d/rc.local
- vi /etc/rc.d/rc.local
chmod +x /etc/rc.local
vi /etc/rc.local
输入
I 键
进入编辑模式(如果没反应请看上面的教程安装 vim),然后在打开的文件中的 exit 0
代码前面插入你的 socat 命令代码(就是上面 nohup socat…的代码)。然后再 按
ESC 键
退出编辑模式,然后输入 :wq
退出并保存。----------
端口转发教程:使用socat进行单个端口的转发,同时支持tcp和udp
用 iptables 经常不成功, haproxy 又不能转发 udp 。那么如果你只有少数几个端口要转发的话,还有一个便利的工具就是 socat 。 socat 唯一麻烦的地方就是好像我没找到如何转发端口段,只能一个命令一个端口。。。不过如果只是自用转发少量端口的话还是蛮好用的。
socat 安装
socat 的安装也很简单,一般直接 yum ( centos )或者 apt-get ( ubuntu , debian )就能装:
yum install -y socat
apt-get update
apt-get install -y socat
socat 的使用
转发 TCP:
nohup socat TCP4-LISTEN:30000,reuseaddr,fork TCP4:1.1.1.1:30000 >> socat.log 2>&1 &
nohup socat TCP4-LISTEN:30000,reuseaddr,fork TCP4:1.1.1.1:30000 >> socat.log 2>&1 &
说明:
TCP4-LISTEN:10000 监听 ipv4 的 10000TCP 端口。 10000 改成你自己需要转发的端口
fork TCP4:1.1.1.1:10000 转发到 1.1.1.1 的 10000 端口,根据需求修改自行修改 ip 和端口
nohup 后台运行。可以把这个命令写到 /etc/rc.local 里面开机启动启动。
转发 UDP
nohup socat -T 600 UDP4-LISTEN:10000,reuseaddr,fork UDP4:1.1.1.1:10000 >> socat.log 2>&1 &
nohup socat -T 600 UDP4-LISTEN:10000,reuseaddr,fork UDP4:1.1.1.1:10000 >> socat.log 2>&1 &
很方便吧 。。把 tcp 改成 udp 就是转发 udp 了。。。。说明如上。也可以直接写到 /etc/local 里面开机自动启动。。
可见,如果你只有一个端口要转发,那么 socat 好像比较方便呢。
No comments:
Post a Comment