Sam*_*tin 5 ubuntu iptables openvpn
我有一个带有 OpenVPN 的 Ubuntu 12.04 盒子。VPN 按预期工作——客户端可以连接、浏览 Web 等。OpenVPN 服务器 IP 是 tun0 上的 10.8.0.1。
在同一个机器上,我可以使用 sshuttle 隧道进入另一个网络以访问 10.10.0.9 上的 Web 服务器。sshuttle 使用以下 iptables 命令来发挥它的魔力:
iptables -t nat -N sshuttle-12300
iptables -t nat -F sshuttle-12300
iptables -t nat -I OUTPUT 1 -j sshuttle-12300
iptables -t nat -I PREROUTING 1 -j sshuttle-12300
iptables -t nat -A sshuttle-12300 -j REDIRECT --dest 10.10.0.0/24 -p tcp --to-ports 12300 -m ttl ! --ttl 42
iptables -t nat -A sshuttle-12300 -j RETURN --dest 127.0.0.0/8 -p tcp
Run Code Online (Sandbox Code Playgroud)
是否可以将来自 OpenVPN 客户端的流量通过 sshuttle 隧道转发到远程 Web 服务器?我最终希望能够在服务器上设置任何复杂的隧道,并让相对“愚蠢”的客户端(iPad 等)能够通过 OpenVPN 访问远程服务器。
下面是场景的基本图:

[编辑:从 OpenVPN 框中添加输出]
$ sudo iptables -nL -v -t nat
Chain PREROUTING (policy ACCEPT 1498 packets, 252K bytes)
pkts bytes target prot opt in out source destination
1512 253K sshuttle-12300 all -- * * 0.0.0.0/0 0.0.0.0/0
Chain INPUT (policy ACCEPT 322 packets, 58984 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 584 packets, 43241 bytes)
pkts bytes target prot opt in out source destination
587 43421 sshuttle-12300 all -- * * 0.0.0.0/0 0.0.0.0/0
Chain POSTROUTING (policy ACCEPT 589 packets, 43595 bytes)
pkts bytes target prot opt in out source destination
1175 76298 MASQUERADE all -- * eth0 10.8.0.0/24 0.0.0.0/0
Chain sshuttle-12300 (2 references)
pkts bytes target prot opt in out source destination
17 1076 REDIRECT tcp -- * * 0.0.0.0/0 10.10.0.0/24 TTL match TTL != 42 redir ports 12300
0 0 RETURN tcp -- * * 0.0.0.0/0 127.0.0.0/8
$ sudo iptables -nL -v -t filter
Chain INPUT (policy ACCEPT 97493 packets, 30M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
131K 109M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1370 89160 ACCEPT all -- * * 10.8.0.0/24 0.0.0.0/0
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Run Code Online (Sandbox Code Playgroud)
[编辑 2:更多 OpenVPN 服务器输出]
$ netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
10.8.0.2 * 255.255.255.255 UH 0 0 0 tun0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
Run Code Online (Sandbox Code Playgroud)
[编辑 3:还有更多调试输出] 在 OpenVPN 服务器上似乎正确启用了 IP 转发:
# find /proc/sys/net/ipv4/conf/ -name forwarding -ls -execdir cat {} \;
18926 0 -rw-r--r-- 1 root root 0 Mar 5 13:31 /proc/sys/net/ipv4/conf/all/forwarding
1
18954 0 -rw-r--r-- 1 root root 0 Mar 5 13:31 /proc/sys/net/ipv4/conf/default/forwarding
1
18978 0 -rw-r--r-- 1 root root 0 Mar 5 13:31 /proc/sys/net/ipv4/conf/eth0/forwarding
1
19003 0 -rw-r--r-- 1 root root 0 Mar 5 13:31 /proc/sys/net/ipv4/conf/lo/forwarding
1
19028 0 -rw-r--r-- 1 root root 0 Mar 5 13:31 /proc/sys/net/ipv4/conf/tun0/forwarding
1
Run Code Online (Sandbox Code Playgroud)
客户端路由表:
$ netstat -r
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
0/1 10.8.0.5 UGSc 8 48 tun0
default 192.168.1.1 UGSc 2 1652 en1
10.8.0.1/32 10.8.0.5 UGSc 1 0 tun0
10.8.0.5 10.8.0.6 UHr 13 0 tun0
10.10.0/24 10.8.0.5 UGSc 0 0 tun0
<snip>
Run Code Online (Sandbox Code Playgroud)
来自客户端的跟踪路由:
$ traceroute 10.10.0.9
traceroute to 10.10.0.9 (10.10.0.9), 64 hops max, 52 byte packets
1 10.8.0.1 (10.8.0.1) 5.403 ms 1.173 ms 1.086 ms
2 192.168.1.1 (192.168.1.1) 4.693 ms 2.110 ms 1.990 ms
3 l100.my-verizon-garbage (client-ext-ip) 7.453 ms 7.089 ms 6.248 ms
4 * * *
5 10.10.0.9 (10.10.0.9) 14.915 ms !N * 6.620 ms !N
Run Code Online (Sandbox Code Playgroud)
有几个问题需要澄清,基本上,您希望 openvpn 客户端能够访问 openvpn 服务器的功能,主要是目标 ssh 服务器子网 (10.10.0.1)。正确的?
openvpn 服务器是否可以访问它应该访问的所有内容?如果是这样,我相信这只是一个路由问题,告诉 openvpn 客户端,任何前往 10.10.0.1/24 的路由都会通过 10.8.0.1。
如果我遗漏了什么,请告诉我。
如果没有,您可以告诉 openvpn 也为其后面的网关进行路由,并将这些路由推送到客户端。
push "route 10.10.0.0 255.255.255.0"
Run Code Online (Sandbox Code Playgroud)
确保让 10.10.0.0 盒子知道返回客户端的路由。另外,不要忘记允许 ip 转发
| 归档时间: |
|
| 查看次数: |
1903 次 |
| 最近记录: |