如何转发 tcp 请求到另一个 ip 地址?

2018 年 1 月 17 日
 zjsxwc

比如在我程序看来是对 ip 地址 A 创建了个 tcp 连接,但实际上是对 ip 地址 B 创建了个 tcp 连接,这应该怎么实现? Linux C 有例子吗?

7544 次点击
所在节点    程序员
18 条回复
wellsc
2018 年 1 月 17 日
NGINX
ThirdFlame
2018 年 1 月 17 日
端口映射?
janxin
2018 年 1 月 17 日
clino
2018 年 1 月 17 日
除了端口映射, socks 代理是不是也是做到这种效果?
dushixiang
2018 年 1 月 17 日
iptables nat
ysc3839
2018 年 1 月 17 日
@clino 是。但是程序先得告诉服务器要连接的地址,不能做到楼主这种效果。
h4lbhg1G
2018 年 1 月 17 日
@FreeEx nat 是不是只能转内网 IP,公网 IP->公网 IP 有效么?
pimin
2018 年 1 月 17 日
端口转发应该是效率最高的
wangking
2018 年 1 月 17 日
ssh 和 iptables 都是有转发功能
lianxiaoyi
2018 年 1 月 17 日
apt-get install rinetd
vim /etc/rinetd.conf
0.0.0.0 3706 xxx.xxx.xxx.xxx 3306
:wq
rinetd /etc/rinetd.conf
azh7138m
2018 年 1 月 17 日
@h4lbhg1G 有啊.....
likuku
2018 年 1 月 17 日
haproxy 的 tcp 连接模式
conn4575
2018 年 1 月 17 日
haproxy+1
zjsxwc
2018 年 1 月 17 日
看了代码原来就是借助 epoll 代理转发,不断的 recv 与 send 数据:

https://github.com/rssnsj/portfwd/blob/master/src/tcpfwd.c#L433

https://github.com/rssnsj/portfwd/blob/master/src/tcpfwd.c#L444
LGA1150
2018 年 1 月 17 日
在本机上执行
iptables -t nat -I OUTPUT -p tcp -d 地址 A --dport 端口 -j DNAT --to 地址 B
xiaoz
2018 年 1 月 17 日
wwqgtxx
2018 年 1 月 17 日
如果要看 userspace 的实现,下面的写的也不错
https://github.com/wangyu-/tinyPortMapper
如果要效率高,还是用 iptables 的 nat 转发
eaglexiang
2018 年 1 月 18 日
@clino socks5 能实现你要的效果,但数据报需要按照 socks5 的协议封装。
见: https://www.eaglexiang.org/socks5-chinese

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/423676

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX