我的目的是设置一个网络命名空间,其中将运行 VPN。我计划将某些应用程序配置为在该命名空间中启动,并位于 VPN 后面。任何未配置为在命名空间中运行的应用程序都应通过常规互联网连接。这是我目前所能做到的(不是我的工作,所以我很难理解哪里出了问题以及接下来需要做什么)。
这是在 Ubuntu 18.04.1 上运行的
创建
etc/iproute2/rt_tables.d
并添加以下内容:sudo echo "3 pia-vpn" > /etc/iproute2/rt_tables.d/pia.conf
创建
/etc/init.d/pia-namespace
并添加以下内容:
# !/bin/bash
# /etc/init.d/pia-namespace
# Create pia namespace and interface pairs
ip netns add pia
ip link add to-pia type veth peer name pia-in
ip link add from-pia type veth peer name pia-out
# Put one of each pair inside the namespace
ip link set pia-in netns pia
ip link set pia-out netns pia
# IP addresses and bring up interfaces outside
ip addr add dev to-pia 192.168.234.2/30
ip link set dev to-pia up
ip addr add dev from-pia 192.168.234.6/30
ip link set dev from-pia up
# IP addresses and bring up interfaces inside
ip netns exec pia ip addr add 192.168.234.1/30 dev pia-in
ip netns exec pia ip addr add 192.168.234.5/30 dev pia-out
ip netns exec pia ip link set dev lo up
ip netns exec pia ip link set dev pia-in up
ip netns exec pia ip link set dev pia-out up
# Pia default route
ip netns exec pia ip route add default via 192.168.234.6 dev pia-out
# Pia return route
ip netns exec pia ip route add 192.168.0.0/24 via 192.168.234.2 dev pia-in
# iptables
iptables -t filter -A INPUT -i to-pia -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -i to-pia -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -o to-pia -j ACCEPT
iptables -t filter -A FORWARD -i from-pia -o enp0s3 -j DROP # Don't leak traffic to the internet
iptables -t filter -A FORWARD -i from-pia -o tun0 -j ACCEPT
iptables -t filter -A FORWARD -i tun0 -o from-pia -m state --state ESTABLISHED,RELATED -j ACCEPT
# Send outgoing traffic from the namespace to the VPN table
ip rule add from 192.168.234.5 lookup pia-vpn prio 500
# Do NAT on the VPN interface
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
- 使其可执行:
sudo chmod +x /etc/init.d/pia-namespace
- 建立符号链接:
sudo ln -s /etc/init.d/pia-namespace /etc/rc5.d/S99pia-namespace
- 配置 OVPN 文件在命名空间中运行
route-up ip route add default dev tun0 table pia-vpn
- 编辑
/etc/sysctl.conf
以显示以下内容:
取消注释该行net.ipv4.ip_forward = 1
- 最后在命名空间中启动应用程序(例如ping):
sudo ip netns exec pia ping 8.8.8.8
最终结果是 ping 挂起或curl ident.me
不返回 IP 地址。我不清楚到底发生了什么,也不知道该如何处理。