与其他 LAN 用户共享我的 VPN 连接

Ubu*_*oob 8 sharing vpn networking openvpn gateway

我有一台带有连接到 VPN 服务器的物理 LAN 适配器的 PC。有没有一种方法可以在同一个 LAN 适配器上设置(虚拟)网关接口,以便我网络上的其他设备可以将其用作网关并通过该接口和 VPN 连接运行其流量?

我的大部分 ifconfig:

enp0s21f5 Link encap:Ethernet  HWaddr 4c:cc:6a:d5:94:96  
      inet addr:192.168.1.120  Bcast:192.168.1.255  Mask:255.255.255.0
      inet6 addr: fe80::76e3:9399:187d:fdad/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
lo        Link encap:Local Loopback  
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:65536  Metric:1
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
      inet addr:10.11.0.2  P-t-P:10.11.0.2  Mask:255.255.0.0
      inet6 addr: fdda:d0d0:cafe:1197::1000/64 Scope:Global
      inet6 addr: fe80::c9b:2e1b:882:1637/64 Scope:Link
      UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
virbr0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00  
      inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
      UP BROADCAST MULTICAST  MTU:1500  Metric:1
Run Code Online (Sandbox Code Playgroud)

这里的路由信息​​:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.11.0.1       0.0.0.0         UG    50     0        0 tun0
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 enp0s21f5
10.11.0.0       0.0.0.0         255.255.0.0     U     50     0        0 tun0
89.238.176.34   192.168.1.1     255.255.255.255 UGH   100    0        0 enp0s21f5
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp0s21f5
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s21f5
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
Run Code Online (Sandbox Code Playgroud)

小智 5

即使在 Ubuntu 19.04 上,逃犯的答案也有效,但如果您不需要为其他 LAN 设备托管互联网连接,那么您可以跳过几个步骤。

如果所有设备都通过 wifi 或有线连接到您的 LAN,您只需使用以下步骤:

  • 确认您的具有 VPN 连接的 PC 可以像路由器一样转发数据包

    1. cat /proc/sys/net/ipv4/ip_forward ##这应该返回'1',如果它不做第2步
    2. 回声“1”>>/proc/sys/net/ipv4/ip_forward

或者你可以使用 sysctl.conf

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p #persistent mode
Run Code Online (Sandbox Code Playgroud)

然后将 iptables 设置为 NAT 并转发在您的本地 LAN 接口上收到并从您的 tun 接口 (VPN) 发出的数据包

iptables -t nat -A POSTROUTING -o tun+ -j MASQUERADE

iptables -A FORWARD -i wlan+ -o tun+ -j ACCEPT #change wlan+ to match your LAN adapter
iptables -A FORWARD -o tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -m conntrack --ctstate ESTABLISHED,RELATED   -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

最后,在您想要使用共享 VPN 的另一台 LAN 计算机上 - 1. 使用 route 命令为 VPN 子网添加路由,并将网关设置为您在 iptables 中设置的 LAN 计算机网络适配器的 IP (不是 tun,而是 wlan+ 或 en+ 适配器)

例如:如果连接VPN的电脑在你的本地网络有一个en0适配器,ip为192.168.0.100,你的VPN可访问的网络子网是10.0.0.0/24

在没有 VPN 连接的另一台 LAN 计算机上,您将输入类似 --(适用于 Windows 操作系统)的路由 cmd

route add 10.0.0.0 mask 255.0.0.0 192.168.0.100 metric 200 if <interface>
Run Code Online (Sandbox Code Playgroud)


fug*_*ive 3

wifi adapter软件解决方案hostapd

sudo apt-get install hostapd -y

配置hostapd

interface=wlan0
ssid=Your_WLAN
hw_mode=g # can be b/g/n
wpa=2
wpa_passphrase=PASS
wpa_key_mgmt=WPA-PSK WPA-EAP WPA-PSK-SHA256 WPA-EAP-SHA256
Run Code Online (Sandbox Code Playgroud)

编辑/etc/network/interfaces

auto wlan0
iface wlan0 inet static
hostapd /etc/hostapd/hostapd.conf
address 192.168.0.1
netmask 255.255.255.0
Run Code Online (Sandbox Code Playgroud)

由于您的 PC 是路由器,因此您需要启用到接口的转发

  • 第一种方式 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p#持久模式
  • 第二次 -echo 1 > /proc/sys/net/ip/ipv4/ip_forward

要在引导时启用它并启动它: systemctl enable hostapd && systemctl start hostapd

安装它dnsmasq,因为它将成为您的 dns 和 dhcp 服务器。

sudo apt install dnsmasq

编辑它的conf文件:vi/etc/dnsmasq.conf

interface=lo,wlan0
no-dhcp-interface=lo
dhcp-range=192.168.0.2,192.168.0.254,255.255.255.0,12h
Run Code Online (Sandbox Code Playgroud)

iptables:

iptables -t nat -A POSTROUTING -o tun+ -j MASQUERADE

iptables -A FORWARD -i wlan+ -o tun+ -j ACCEPT
iptables -A FORWARD -o tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -m conntrack --ctstate ESTABLISHED,RELATED   -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

请让我知道这对你有没有用。