Linux 接入点作为隧道分离器

Linux 接入点作为隧道分离器

由于我的工作场所使用 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

希望这对某人有帮助!

相关内容