通过以太网共享 VPN 连接

通过以太网共享 VPN 连接

我正在尝试将装有 Linux(CentOS)的旧 PC 设置成另一个家中 VPN 的接入点。我有两个以太网接口,因此我想使用其中一个通过路由器连接到互联网,连接到 VPN,然后通过第二个以太网共享该 VPN 连接。第二个设备上的 IP 应由 DHCP 分配。

我读了很多教程/帖子,我可以在关闭 VPN 的情况下共享普通互联网连接。但是,一旦我启动 VPN,无论我的 iptables/routes 规则是什么,我的第二台设备都无法上网。我不知道我做错了什么。有人能帮忙吗?

这是我的配置: - enp2s0:连接到我的主路由器。 - enp0s29f7u1:这将连接到第二个设备

enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP                                                                                           group default qlen 1000
    link/ether bc:ee:7b:19:89:68 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.26/24 brd 192.168.1.255 scope global noprefixroute enp2s0
       valid_lft forever preferred_lft forever
    inet6 fe80::c25c:2c9d:4777:79fc/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
enp0s29f7u1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast stat                                                                                          e UP group default qlen 1000
    link/ether 00:e0:4c:69:35:d0 brd ff:ff:ff:ff:ff:ff
    inet 10.8.0.5/24 brd 10.8.0.255 scope global noprefixroute enp0s29f7u1
       valid_lft forever preferred_lft forever
    inet6 fe80::2e0:4cff:fe69:35d0/64 scope link
       valid_lft forever preferred_lft forever

一旦我连接到我的 VPN,就会有另一个接口,tun0:

tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.8.0.2/24 brd 10.8.0.255 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::2d75:64c0:6c21:c9d9/64 scope link flags 800
       valid_lft forever preferred_lft forever

我的 /etc/dhcp/dhcpd.conf 有以下选项:

subnet 10.8.0.0 netmask 255.255.255.0 {
  range 10.8.0.10 10.8.0.15;
  option routers 10.8.0.5;
  option domain-name-servers 8.8.8.8, 8.8.4.4;
}

第二台设备的 IP 为 10.8.0.11,因此我猜它工作正常。

我使用 iptables 添加了以下规则:

iptables -t nat -I POSTROUTING 1 -o tun0 -j MASQUERADE
iptables -I FORWARD 1 -i tun0 -o enp0s29f7u1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 1 -i enp0s29f7u1 -o tun0 -j ACCEPT

附加信息:

  • 我确实启用了 ip4 转发: /sbin/sysctl net.ipv4.ip_forward返回 net.ipv4.ip_forward = 1

  • 我可以正常使用另一个家中的 VPN 服务器的 IP 访问互联网。但是,我只能从设置此配置的计算机执行此操作,而不能从通过 连接的设备执行此操作enp0s29f7u1

  • 这是启动 vpn 之前/之后的路由。

ip route
default via 192.168.1.1 dev enp2s0 proto static metric 101
10.8.0.0/24 dev enp0s29f7u1 proto kernel scope link src 10.8.0.5 metric 100

路由

0.0.0.0/1 via 10.8.0.1 dev tun0
default via 192.168.1.1 dev enp2s0 proto static metric 101
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2
10.8.0.0/24 dev enp0s29f7u1 proto kernel scope link src 10.8.0.5 metric 100
xx.xx.xx.xx via 192.168.1.1 dev enp2s0
128.0.0.0/1 via 10.8.0.1 dev tun0
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.26 metric 101

192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.26 metric 101

我已将我的 VPN 服务器公共 IP 替换为 xx.xx.xx.xx

我在这里遗漏了什么?

编辑:出于绝望,我尝试桥接接口,即使我知道这不是一个好主意。它也没有用。

答案1

您做对了很多事情,所以恭喜您取得如此大的成就。但我觉得有些事情不对。

您的 tun0 默认路由错误:0.0.0.0/1 仅将一半互联网传送到 tun0。您需要另一半。尝试添加 128.0.0.0/1。或者使用“默认”或 0.0.0.0/0 一次性获得两半,但请确保使用比“通过 192.168.1.1 默认”更低的度量。完成此操作后,请参阅我的最后一段。您可能会引入另一个问题。

让我感到困扰的另一件事是,你对 tun 子网和 LAN 子网都使用了 10.8.0.0/24。你可能希望它们是不同的子网。这也表现为路由表中 10.8.0.0/24 的两个重复路由。尝试将 enp0s29f7u1 转移到下一个子网 10.8.1.5/24,并对你的 dhcp 服务器执行相同操作。

subnet 10.8.1.0 netmask 255.255.255.0 {
  range 10.8.1.10 10.8.1.15;
  option routers 10.8.1.5;
  option domain-name-servers 8.8.8.8, 8.8.4.4;
}

除此之外,配置看起来不错。还有一项完整性检查。确保您没有阻塞 VPN 与互联网的连接。您仍然需要一条优先于 0.0.0.0/0 的路由,以便 tun 不会尝试使用自身来访问 VPN 服务器。您的表中必须有一条比 0.0.0.0/0 更具体的路由。我相信您已经有了这条路由,但这是一个常见的错误。

xx.xx.xx.xx via 192.168.1.1 dev enp2s0

为了验证这一点,请确保 tun 接口上的 Rx 计数器增加建立隧道。

答案2

这是我在别处找不到的答案,但适用于另一种网络拓扑。如果有人在搜索这个,我会发布它。


HOST3将 openvpn 客户端托管到 vpn 提供商。

我想要的是任何本地主持人都可以选择互联网接入有两种方式:

  • 正常情况下(通过 192.168.0.254)
  • 通过 VPN 连接(通过 10.81.0.1)

我不得不 :

  • HOST3为enp2s0 添加第二个 IP 地址(192.168.0.6)微型代理聆听并受其约束。
  • 添加第二个路由表
  • 使用 netfilter SNAT (或 MASQUERADE)
                 INTERNET 
                    |
                   ISP 
                    |
             LOCAL NETWORK 192.168.0.0/24
                    |
+-------------------+---------------------------+
|                   |                           |
ISP                HOST3                      HOST4
ROUTER GATEWAY     enp2s0 192.168.  0.  3     enp2s0 192.168.0.4
192.168.0.254             192.168.  0.  6 
                   tun0    10. 81.  0. 13    
                    |                        
                   VPN GATEWAY 10.81.0.1
............................................................................
ip rules:
0:  from all lookup local 
32765:  from 192.168.0.6 lookup VPN 
32766:  from all lookup main 
32767:  from all lookup default 

table [main]:
default             via 192.168.  0.254     dev enp2s0            metric 200
 10. 81.  0.  0 /16                         dev tun0   scope link metric 100
192.168.  0.  0 /24                         dev enp2s0 scope link metric 200

table [VPN]:
default             via  10. 81.  0.  1     dev tun0              metric 200
192.168.  0.  0 /24                         dev enp2s0 scope link metric 100

[Netfilter:NAT]
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source       destination         
   10   600 SNAT       all  --  *      tun0    192.168.0.6  0.0.0.0/0   to:10.81.0.13

ISP 本地网络上每个想要使用 VPN 的主机只需将浏览器配置为使用 192.168.0.6 的代理。

数据包路径:HOST-->[电子邮件保护]--> tun0(路由表 [VPN])--> 使用 VPN 本地 IP 地址进行 SNAT(否则 openvpn 客户端将丢弃数据包)

相关内容