![Linux 接入点作为隧道分离器](https://linux22.com/image/716192/Linux%20%E6%8E%A5%E5%85%A5%E7%82%B9%E4%BD%9C%E4%B8%BA%E9%9A%A7%E9%81%93%E5%88%86%E7%A6%BB%E5%99%A8.png)
由于我的工作场所使用 Cisco VPN(AnyConnect 协议)来访问生产和测试服务器,因此我需要始终连接到这些服务器才能工作。
问题是 VPN 没有实现分割隧道,所以我只能连接到互联网或开发服务器(开发服务器位于局域网段上),或者连接到生产或测试服务器。
我想到了一个主意,使用 Raspberry Pi 3 来分割 VPN,并使用这个名为 vpn-slice 的超棒工具(https://github.com/dlenski/vpn-slice)
它确实有效,并且我可以通过树莓派访问互联网、VPN 服务器和局域网段。
现在的问题是:
连接到 hostapd 的 PC 可以导航到互联网,但没有局域网访问(局域网位于 192.168.32.1/22,内部 wifi 接入点位于 192.100.100.1/24)我想我可能需要一座桥,但从未真正配置过一座(我不是网络人员)
我无法访问 vpn,因为在另一个设备(tun0)上
因此,这是我的 ifconfig 的输出:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.33.112 netmask 255.255.252.0 broadcast 192.168.35.255
inet6 fe80::ba27:ebff:fe8b:bc4a prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:8b:bc:4a txqueuelen 1000 (Ethernet)
RX packets 335923 bytes 94865354 (90.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 38890 bytes 12941447 (12.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 176 bytes 13688 (13.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 176 bytes 13688 (13.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1239
inet 192.168.249.52 netmask 255.255.255.255 destination 192.168.249.52
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 2 bytes 198 (198.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2 bytes 166 (166.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.100.100.1 netmask 255.255.255.0 broadcast 192.100.100.255
inet6 fe80::ba27:ebff:fede:e91f prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:de:e9:1f txqueuelen 1000 (Ethernet)
RX packets 39416 bytes 12108156 (11.5 MiB)
RX errors 0 dropped 6 overruns 0 frame 0
TX packets 56938 bytes 61317586 (58.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
这是我的路线 -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.32.1 0.0.0.0 UG 0 0 0 eth0
10.128.231.134 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.129.127.46 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.129.127.48 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
x.224.64.x 192.168.32.1 255.255.255.255 UGH 0 0 0 eth0
192.100.100.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.32.0 0.0.0.0 255.255.252.0 U 0 0 0 eth0
这是我用来伪装无线接入点(wlan0)到互联网的方法:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
我不知道如何将 wlan0 路由到 eth0 系列(lan)和 tun0(vpn)服务器(请注意,我只需要包含在路由命令中的特定服务器)
感谢所有提供帮助的人!
答案1
所以,我明白了问题出在哪里。
由于我的默认策略是接受转发流量,因此没有必要制定转发规则(否则我甚至需要 wlan0 <--> tun0 转发规则)
我所需要做的就是伪装 tun0,这样地址就可以被重写。
我用了:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
现在我可以访问互联网、局域网和 VPN
希望这对某人有帮助!