首先,我对这个问题的了解非常有限。我尝试使用 Ubuntu VM 作为同一网络上其他设备的 VPN 网关。VPN 使用 Cisco Anyconnect VPN 客户端。
网络配置如下:
连接到“互联网”的 TP-Link 路由器用作默认网关,IP 地址为 192.168.0.1。VM 现在应用作其他设备的默认网关,IP 地址为 192.168.0.104。
当客户端建立连接时,VM 上的 iptables 如下所示:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N ciscovpn
-N ciscovpnfinal
-N ciscovpnfw
-A INPUT -j ciscovpn
-A INPUT -j ciscovpnfw
-A INPUT -j ciscovpnfinal
-A FORWARD -j ciscovpn
-A FORWARD -j ciscovpnfw
-A FORWARD -j ciscovpnfinal
-A OUTPUT -j ciscovpn
-A OUTPUT -j ciscovpnfw
-A OUTPUT -j ciscovpnfinal
-A ciscovpn -m state --state RELATED,ESTABLISHED -j ACCEPT
-A ciscovpn -o lo+ -j ACCEPT
-A ciscovpn -i lo+ -j ACCEPT
-A ciscovpn -p udp -m udp --sport 68 --dport 67 -j ACCEPT
-A ciscovpn -p udp -m udp --sport 67 --dport 68 -j ACCEPT
-A ciscovpn -p udp -m udp --sport 546 --dport 547 -j ACCEPT
-A ciscovpn -p udp -m udp --sport 547 --dport 546 -j ACCEPT
-A ciscovpn -s 192.168.0.104/32 -d 193.175.213.80/32 -o enp0s3 -p tcp
-m tcp --dport 443 -j ACCEPT
-A ciscovpn -s 193.175.213.80/32 -d 192.168.0.104/32 -i enp0s3 -p tcp
-m tcp --sport 443 -j ACCEPT
-A ciscovpn -s 192.168.0.104/32 -d 193.175.213.80/32 -o enp0s3 -p udp
-m udp --dport 443 -j ACCEPT
-A ciscovpn -s 193.175.213.80/32 -d 192.168.0.104/32 -i enp0s3 -p udp
-m udp --sport 443 -j ACCEPT
-A ciscovpn -i cscotun0 -j RETURN
-A ciscovpn -s 10.60.38.146/32 -o cscotun0 -j RETURN
-A ciscovpn -j DROP
-A ciscovpnfinal -j ACCEPT
VM 具有enp0s3
可访问 LAN 网络的接口。该接口cscotun0
是 VPN 客户端创建的用于访问互联网的接口。为了创建网关,我尝试了以下命令本教程:
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo iptables -A FORWARD -o cscotun0 -i enp0s3 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
但是,我的网络 192.168.0.0/24 中的其他设备仍然无法访问虚拟机。在与 VPN 客户端建立连接之前,我可以从主机向虚拟机发送 ping 命令。建立连接后,虚拟机将无法访问。我无法深入了解 VPN 客户端创建的那些规则。