我有以下网络设置:
+-----------------------------------+
| |
+------------------------+ | Public Box |
| Client Box | IPSEC | public IP: x.x.x.x |
| 192.168.13.21 +--------------+ source IP for IPSEC: 192.168.23.1 |
+------------------------+ | |
+-----------------------------------+
客户端盒没有公开可用的 IP 地址(它隐藏在 NAT 路由器后面,而该路由器本身从互联网提供商(运营商级 NAT)获取 10.xxx/8 地址,但它有一个永久运行的到公共盒的 IPSEC 隧道。我可以通过公共盒和客户端盒的 192.xxx 地址进行通信。公共盒配置为使用 IP 地址 192.168.23.1 在 IPSEC 隧道内进行通信,也可以通过此地址从客户端盒和其他盒访问。公共盒的公共 IP 地址不在 IPSEC 配置的加密域(左子网/右子网)中。
到目前为止,一切都运行良好。现在的目标是使客户端盒的一个 IP 端口 (443) 从互联网公开,通过 IPSEC 隧道将指向公共盒公共 IP 地址端口 10443 的任何连接转发到客户端盒的端口 443。
我已经尝试使用以下规则(我已接受所有政策)
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 10443 -j DNAT --to 192.168.13.21:443
这不起作用。当我尝试远程登录到公共箱的 10443 端口时,我收到“telnet:连接到地址 xxxx:网络无法访问”
原因似乎是公共箱尝试通过 ARP 查找 192.168.13.31 IP 地址,它不会将连接放入 IPSEC 隧道。
00:26:42.649885 IP 88.217.180.252.34730 > x.x.x.x.10443: Flags [S], seq 17484960, win 65535, options [mss 1412,nop,wscale 5,nop,nop,TS val 1133369435 ecr 0,sackOK,eol], length 0
00:26:42.650012 ARP, Request who-has 192.168.13.21 tell x.x.x.x, length 28
我相信这是因为该数据包的 SOURCE 地址是连接发起者的源地址,因此它不会被打包到隧道中(隧道仅路由 192.168.23.0/24 <--> 192.168.13.0/24)。
所以,我的问题是:是否可以将传入数据包的源地址 NAT 为 192.168.23.1,以便它通过 IPSEC 隧道路由到客户端箱,并且任何应答数据包都会再次到达公共箱,以便“取消伪装”并发送回发起者?
这可能吗?