我需要在 Centos 7 上使用firewalld.
我在 Centos 6.5 上使用了 iptables,只需要添加以下几行/etc/sysconfig/iptables:
-A POSTROUTING -s "10.0.0.0/24" -o "wlan0" -j MASQUERADE
-A FORWARD -p tcp -s 10.0.0.0/24 -d 0.0.0.0/0 -j ACCEPT
run the command: echo 1 > /proc/sys/net/ipv4/ip_forward
open port 443.Run Code Online (Sandbox Code Playgroud) 我在同一台服务器上运行多个 VPN 服务器软件,其中两个(tinc 和 openvpn)使用相同的/dev/net/tun设备并生成 tunX iface。
后来启动的将从零开始使用tun设备,因此他们正在重复使用彼此的设备并导致很多问题和服务中断。
我的问题是,是否可以让 OpenVPN 使用其他名称(如 tun-X 或 otun-Y 等)生成自己的 tun?
我能够设置一个网络命名空间,使用 openvpn 建立隧道并启动一个在命名空间内使用此隧道的应用程序。到目前为止一切顺利,但是可以通过 Web 界面访问此应用程序,我不知道如何将请求路由到 LAN 内的 Web 界面。
我遵循了@schnouki 的指南,解释了如何设置网络命名空间并在其中运行 OpenVPN
ip netns add myvpn
ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up
ip link add vpn0 type veth peer name vpn1
ip link set vpn0 up
ip link set vpn1 netns myvpn up
ip addr add 10.200.200.1/24 dev vpn0
ip netns exec myvpn ip addr add 10.200.200.2/24 dev vpn1
ip netns exec myvpn ip route add …Run Code Online (Sandbox Code Playgroud) 我四处搜索,我发现的唯一一件事是“是的,OpenVPN 支持通过 TCP 的连接”,但我没有找到任何方法来强制 openvpn 服务器同时侦听两种协议的相同端口. 我发现了一些关于创建 tap 接口的非常旧的指南,或者建议同时运行具有相同配置的另一个服务器实例。前者对于简单的事情来说看起来太复杂了,而后者似乎已经过时了。
我正在将 Arch Linux 与 Gnome 一起使用,我想用它openconnect来连接到 VPN 服务器。我可以在命令行中毫无问题地执行此操作,但我无法使用 Gnome 执行此操作;我收到以下错误:
NetworkManager[589]: <error> [1475998103.4381] vpn-connection[0x28a9530,dc5d3708-967d-4e50-90ac-d0c892fe8ab3,"nm-vpn-connection.c",0]: Failed to request VPN secrets #3: No agents were available for this request.
Run Code Online (Sandbox Code Playgroud)
该ArchLinux的维基建议去做:
ln -s /usr/lib/networkmanager/nm-openconnect-auth-dialog /usr/lib/gnome-shell/
但这也不能解决问题。
当我点击连接时出现问题;我无法激活与 Gnome 和 NetworkManager 的 VPN 连接。
我刚刚设置了 OpenVPN,它按预期工作。然而,客户端的路由表让我困惑不已。这是路由表:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0
54.202.18.143 10.0.2.2 255.255.255.255 UGH 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
0.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0
128.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 …Run Code Online (Sandbox Code Playgroud) 在网络管理器的身份选项卡下,我可以为我的 OpenVPN 连接输入用户名和密码。我还可以为“用户私钥”输入密码。
两个密码字段都有以下选项:
如果我选择存储密码(“为此用户”或“所有用户”),它存储在哪里?
我想连接位于远程建筑物上的多个 LAN。
“中央”站点有一台运行 OpenVPN 的 Linux 计算机。每个远程站点也运行 OpenVPN。
然后我需要:
1. 定义虚拟 LAN
2. 为每个站点配置 1:1 NAT
3. 必须在中央路由器上配置 1:1 NAT
.
因此可以看到每个站点都有一个 10.10.x.0/24 LAN。
当一台计算机想要到达站点 12 上的 192.168.0.44 时,它只需要向 10.10.12.44 发送一个数据包
操作 VPN 对我来说不是问题。我目前连接了 60 多个站点。但是我没有找到一种简单的方法来执行此 1:1 NAT。
以下是从中心站点发送到远程站点的数据包及其响应数据包的示例:

我用 iptables NETMAP 做了一些测试,但我无法让它工作,因为我没有找到在路由决定后修改源+目的地的方法。
我更喜欢避免使用新的--client-natOpenVPN 功能。
也许我必须强制路由ip route?或者用veth?循环两次进入网络堆栈?
注意:我不想使用伪装。只有 1/1 NAT。
编辑:
常规的 openVPN 设置是不可能的。因为来自远程站点的数据包与来自另一个站点的数据包无法区分:两者具有相似的源地址和目标地址,并且都来自相同的 tun(或 tap)接口。所以不可能对它进行源 NAT。
解决方案 1:在远程站点上进行 NAT。在我的情况下是不可能的。我必须只在中央站点上执行此操作。
解决方案 2:为每个远程站点设置一个 VPN。所以我会给每人一桶。我认为这可以。内存效率不是很高,但还可以。 …
我想要做的是通过 vpn 隧道路由 IPv6 流量。这样,我应该能够在不支持 IPv6 的网络中使用 IPv6。
我有一个分配了 IPv6 块的 VPS。这个块的一部分我想用于 openvpn 客户端。我想到的范围是2001:db8::111:800:0/112(前缀是匿名的),因为 openvpn 只支持 /64 和 /112 作为子网。
通过隧道的 IPv6 已经在工作,从客户端,我可以 ping 服务器 ( 2001:db8::111:800:1),也可以连接服务器上的接口 (2001:db8::111:100:100和2001:db8:216:3dfa:f1d4:81c0)。
但是,当尝试从客户端 ping google.com 时,我没有收到任何响应(ping 超时)。为了调试这个问题,我使用 tcpdump 来捕获服务器上的流量,我可以看到 ping 数据包出去,但没有回复回来。向 ip6tables 添加日志规则显示相同,数据包出去,但没有进入。
我使用了一个在线跟踪路由工具,它从我的服务器获取超时。我也试过直接在接口上设置ip,确实导致ip( 2001:db8::111:800:1001)可达,所以我认为这是路由问题。
我已经通过/proc/sys/net/ipv6/conf/all/forwarding. ip6tables 对所有链都有策略允许。
我的问题是,Linux 到底需要什么才能接受未分配给接口的 ip 的数据包并进一步路由它?仅仅存在一条路线似乎还不够。
这是我的客户端和服务器的设置。如果需要更多信息,请告知。
客户
# ip -6 addresses
10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
inet6 2001:db8::111:800:1001/112 scope global
valid_lft forever preferred_lft forever …Run Code Online (Sandbox Code Playgroud) 我已经做了一些搜索,或多或少地了解tun0界面的作用。我从各种来源得到以下信息,
操作系统通过 tun/tap 设备发送的数据包被传送到用户空间程序,该程序将自身附加到设备上。用户空间程序也可以将数据包传递到 tun/tap 设备。在这种情况下,tun/tap 设备将这些数据包传送(或“注入”)到操作系统网络堆栈,从而模拟它们从外部源的接收。tun/tap 接口是纯软件接口,这意味着它们仅存在于内核中,并且与常规网络接口不同,它们没有物理硬件组件(因此没有物理线连接到它们)。
您可以将 tun/tap 接口视为常规网络接口,当内核决定“在线”发送数据的时刻到来时,它会将数据发送到连接到该接口的某个用户空间程序。
现在,如果我比较eth0和 的输出tun0,我会看到类似的内容。
ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:14:22:50:78:71
inet addr:172.16.210.32 Bcast:172.16.255.255 Mask:255.255.0.0
...
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
<snipped>
Run Code Online (Sandbox Code Playgroud)
ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
Run Code Online (Sandbox Code Playgroud)
现在,如果我们尝试比较两者,我们会发现这些差异,
eth0确实有一个 MAC 地址,可以理解tun0没有。
eth0工作在广播模式,tun0工作在点对点模式。
我有以下几点我不明白。
地址P-t-P:10.8.0.2在这种情况下的作用是什么?
为什么tun0设置的子网掩码为255.255.255.255?