首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确配置两层端口转发的iptable:通过VPN连接到本地服务器的外部服务器

问正确配置两层端口转发的iptable:通过VPN连接到本地服务器的外部服务器
EN

Server Fault用户
提问于 2022-04-24 01:30:20
回答 1查看 470关注 0票数 1

我在VPS (Debian 10)上运行了一个Min克拉夫特服务器,但是VPS太小,无法处理它,所以我想使用一个更强大的本地服务器来运行它(Ubuntu22.04)。VPS承载一个OpenVPN服务器,本地服务器作为唯一的客户端进行连接。VPS为10.8.0.1,本地服务器为10.8.0.6 (本地网络为192.168.1.185)。

我使用iptables规则将10.8.0.6:25565的tun0 VPN数据包转发到本地服务器的IP。这很好:我可以从VPS中查询Min克拉夫特服务器。然后,我在VPS上设置了相同的规则集(当然是交换了相关的up ),将连接从vps_external_ip:25565转发到10.8.0.6:25565。此规则是将数据包一直转发到本地服务器,但连接总是超时。奇怪的是,无论是来自VPS ->本地服务器的工作连接还是来自外部-> VPS ->本地服务器的连接都不会增加任何POSTROUTING伪装规则的数据包计数器,但它们会对PREROUTING规则起作用。当TCP/UDP连接在eth0:25565上按VPS时,只需超时,就不会出现拒绝连接的错误。

IPV4转发在这两台机器上都是启用的,我已经尝试过禁用UFW,那里没有运气。

我在两个服务器的NAT POSTROUTE上设置了一个日志规则,但是我不太确定如何解决这个问题,因为我找不到任何问题。

POSTROUTE日志输出(iptables -t nat -I POSTROUTING -j日志-日志前缀"NAT:“-日志级别7)

代码语言:javascript
复制
##### VPS
Apr 23 20:52:02 vpskernel: [1552376.122382] NAT1:IN= OUT=tun0 SRC=<my ip> DST=10.8.0.6 LEN=48 TOS=0x08 PREC=0x20 TTL=114 ID=21284 DF PROTO=TCP SPT=1806 DPT=25565 WINDOW=64240 RES=0x00 SYN URGP=0

#### Local server
<could not find any relevant logs grepping /var/log/kern.log for NAT1 and there were no logs at all for tun0>

对于每个服务器,我使用/etc/ufw/ used .规则来设置iptable规则。

副总裁/etc/ufw/etc.规则:

代码语言:javascript
复制
# START OPENVPN RULES
# NAT table rules
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
# END OPENVPN RULES

-A PREROUTING -i eth0 -d <vps external IP> -p tcp --dport 25565 -j DNAT --to-destination 10.8.0.6:25565
-A PREROUTING -i eth0 -d <vps external IP> -p udp --dport 25565 -j DNAT --to-destination 10.8.0.6:25565
-A POSTROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -j MASQUERADE
COMMIT

本地服务器/etc/ufw/pre.Rule

代码语言:javascript
复制
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i tun0 -d 10.8.0.6 -p tcp --dport 25565 -j DNAT --to-destination 192.168.1.185:25565
-A PREROUTING -i tun0 -d 10.8.0.6 -p udp --dport 25565 -j DNAT --to-destination 192.168.1.185:25565
# setup routing
-A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE
COMMIT

PREROUTING规则正在工作,但POSTROUTING规则计数器不递增。

我在25565上运行tcpdump进行调试。我看到数据包进入,但在外部连接时看不到任何接口上的任何返回。当直接从VPS查询时,我看到本地服务器在tun0上响应。看起来问题是本地服务器试图直接响应en01上的IP,而不是tun0上的VPS,但我不知道如何解决这个问题。

副总裁tcpdump:

代码语言:javascript
复制
# eth 0
21:43:39.972647 IP my_ip.2729 > vps_ip.25565: Flags [S], seq 1483515507, win 64240, options [mss 1460,nop,nop,sackOK], length 0
# tun0
21:43:39.972739 IP my_ip.2729 > 10.8.0.6.25565: Flags [S], seq 1483515507, win 64240, options [mss 1460,nop,nop,sackOK], length 0

本地服务器tcpdump:

代码语言:javascript
复制
#tun0
21:43:39.972566 IP my_ip.2729 > 10.8.0.6.25565: Flags [S], seq 1483515507, win 64240, options [mss 1356,nop,nop,sackOK], length 0

#en01
21:43:39.972618 IP 10.8.0.6.25565 > my_ip.2729: Flags [S.], seq 2141764446, ack 1483515508, win 64240, options [mss 1460,nop,nop,sackOK], length 0
EN

回答 1

Server Fault用户

发布于 2022-04-24 02:05:55

终于弄明白了。大多数在线端口转发指南都有一个不适用于OpenVPN (或我的情况)的POSTROUTING规则。与其允许本地IP作为非本地IP的目标源,我还必须为除本地IP之外的任何东西制定postrouting规则,以便将其重写为tun0 VPS。

VPS /etc/ufw/ and .规则(互换S和d):

-A POSTROUTING -d 10.0.0.0/8 ! -s 10.0.0.0/8 -j MASQUERADE -t nat

此外,POSTROUTING规则只需要在VPS上使用。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1099310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档