内网转发的 DNS 困惑

364 天前
 hanssx

公司改革 VPN ,换上了VPN ,不想在所有电脑上面都装,于是开了一台虚拟机专门用于转发 VPN ,参考了 V 站一篇文章 https://www.v2ex.com/t/877112 ,之前只有单一 VPN 功能的情况下转发成功了,现在换成了这种,转发就没效果了。

相关信息

家庭内网:192.168.0.0/22

公司 VPN 内网:10.0.0.0/8

公司 VPN DNS 服务器:10.44.X.X 10.95.X.X

主路由器已设置 DNS 转发和静态路由

左边是 VPN 机器上面的 DNS ,即公司内网 DNS ;右边是主路由 openwrt 的,用于把相关匹配到的公司内网域名引到 DNS 服务器去做解析

openwrt 上面的静态路由,用于定位 DNS 服务器和相关公司内网 IP 流量的转发(这一步实际上可以放到内网需要连 VPN 的机器上面去做,因为我这边内网只有 192.168.0/22 网段,所以直接简单直接放到路由器去做了)

VPN 机器已经开启转发和 SNAT

VPN 机器是 192.168.0.104

uos@uos:~$ cat /proc/sys/net/ipv4/ip_forward
1
uos@uos:~$ sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/22 -o tun0 -j MASQUERADE
uos@uos:~$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  192.168.0.0/22       anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
# Warning: iptables-legacy tables present, use iptables-legacy to see them

DNS 问题

VPN 机器通过 ping 和 nslookup 得到的 IP 竟然不一样,traceroute 和 ping 的结果是一样的,出来一个 198.18 段

uos@uos:~$ ping wiki.xx.com
PING wiki.xx.com (198.18.0.11) 56(84) bytes of data.
64 bytes from 198.18.0.11 (198.18.0.11): icmp_seq=1 ttl=64 time=0.734 ms

uos@uos:~$ nslookup
> wiki.xx.com 
;; Got recursion not available from 10.44.X.X, trying next server
;; Got recursion not available from 10.95.X.X, trying next server
Server:         fd22:X:X::1
Address:        fd22:X:X::1#53

Non-authoritative answer:
wiki.xx.com     canonical name = wiki.xx.com.
Name:   wiki.xx.com
Address: 10.57.22.11


客户机也无法连接公司内网域名,虽然能 ping 通内网 IP ,但是不知道怎么能得到解析结果为 198.18 的

x@DESKTOP-XXXXX C:\Users\x
# ping wiki.xx.com

正在 Ping wiki.xx.com [10.57.22.11] 具有 32 字节的数据:
Control-C

# ping 198.18.0.11

正在 Ping 198.18.0.11 具有 32 字节的数据:
来自 198.18.0.11 的回复: 字节=32 时间=1ms TTL=63

1617 次点击
所在节点    Linux
10 条回复
hingle
364 天前
198.18.0.0/15 很可能是有 clash
hanssx
364 天前
@hingle 我客户机上面确实有 clash for windows ,其他机器上面是没有的,VPN 机器只有个 QQ 和公司*零*信*任*,多出来的这个 198.18 确实理解不了,可能带*零*信*任*的 VPN 没办法这么搞吧,哎,实在不行只能挨个机器装了。
joyanhui
364 天前
赞同#1 同样感觉是 fake-ip 惹得祸
Aurorataro
364 天前
198.18 段 估计是 Clash 给你分配的 Fake ip ,可以设置相关域名绕过 Clash 核心
hanssx
363 天前
@Aurorataro
@joyanhui
老哥们,但是我只有客户机上有 clash for windows ,链路是这样的:家庭内网客户机(192.168.0.100)->VPN 机器(192.168.0.104 当然拨完 VPN 有一个 10.0.0.0/8 的网卡)->公司内网(10.0.0.0/8)
我得到 198.18 段是在 VPN 机器上面得到的,家庭网关是 192.168.0.1 ,它虽然是 openwrt ,但是它的 openclash 我并没有开启,旁路由是 192.168.0.2 上面倒是开了 openclash ,但是它只服务于特定的几台机器,并不在上面的机器里面。

fake ip 起码也要经过 clash 才能得到吧?
nanshaobit
363 天前
qax ?
hanssx
363 天前
客户机:想通过 vpn 机器上公司内网的机器

验证了一下应该不是 clash fake-ip range ,因为
1 、我把旁路由直接关机了,客户机 clash 也退掉重新启动了电脑,还是那样。
2 、我接通 vpn 之后 ping 的是 198.18 ,断开 vpn 之后 ping 不通。
3 、链路上面不涉及客户机和旁路由的 clash ,是 vpn 那台机器上面就会得到那个 ip

最后发现 转发 IP 层流量是成功的,不过只能用 IP 访问,比如 198.18 访问,因为域名访问得不到正确的 198.18 段 IP ,但是通过 IP 访问依然需要认证 web 端零信任,依然没法正常使用。

最后放弃。
pagxir
363 天前
你 openwrt 能 ping 通你们公司的 DNS 么。有可能你需要在 VPN 的机器上安装一下代理转发
hanssx
363 天前
@pagxir 能的,这不是普通的 VPN ,应该是开了代理,有认证相关,直接转发流量是不行的。
pagxir
363 天前
@hanssx 手动改 host 呢,hosts 文件 windows 下在 c:\windows\system32\drivers\etc 下

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

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

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

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

© 2021 V2EX