私は以下に従おうとしています:https://superuser.com/a/1262250/41337しかし、私はそれを動作させることはできません。
私は以下が欲しい:
interface=eth0
down() {
ip netns delete myvpn
ip link delete vpn0
iptables -D INPUT \! -i vpn0 -s 10.200.200.0/24 -j DROP
iptables -t nat -D POSTROUTING -s 10.200.200.0/24 -o $interface -j MASQUERADE
}
up() {
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 default via 10.200.200.1 dev vpn1
iptables -A INPUT \! -i vpn0 -s 10.200.200.0/24 -j DROP
iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o $interface -j MASQUERADE
sysctl -q net.ipv4.ip_forward=1
mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf
ip netns exec myvpn ping 8.8.8.8
}
down
up
他の端末では、以下を実行します。
$ sudo tcpdump -ni any host 8.8.8.8
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
22:49:44.817183 vpn0 In IP 10.200.200.2 > 8.8.8.8: ICMP echo request, id 18314, seq 1, length 64
22:49:45.822772 vpn0 In IP 10.200.200.2 > 8.8.8.8: ICMP echo request, id 18314, seq 2, length 64
22:49:46.842785 vpn0 In IP 10.200.200.2 > 8.8.8.8: ICMP echo request, id 18314, seq 3, length 64
これは欠けているステップがあると信じます。ネットワークトラフィックはeth0から出ません。
これらはすべて機能します:
ip netns exec myvpn ping 10.200.200.1
ip netns exec myvpn ping 10.200.200.2
ping 10.200.200.2
失敗します。
ping 10.200.200.1
答え1
このコマンドは...
ip netns exec myvpn ip route add default via 10.200.200.1 dev vpn1
...失敗しなければなりません。
Error: Nexthop has invalid gateway.
インターフェイスが設定されていないためですvpn1
up
(したがって10.200.200.1
アクセスできません)。アドレスを割り当てた直後にこれを行う必要があります。
ip netns exec myvpn ip addr add 10.200.200.2/24 dev vpn1
ip netns exec myvpn ip link set vpn1 up
次のスクリプトは私にとって効果的です。これは、次の変更を除いてスクリプトとほぼ同じです。
ip set link up
前述の不足しているコマンドを追加しました。ip netns exec myvpn ip ...
すべてのインスタンスを次のように置き換えました。ip -n myvpn ...
- 私はこの
netns
主張を使用しましたip link add
#!/bin/bash
interface=eth0
down() {
ip netns delete myvpn
ip link delete vpn0
iptables -D INPUT \! -i vpn0 -s 10.200.200.0/24 -j DROP
iptables -t nat -D POSTROUTING -s 10.200.200.0/24 -o $interface -j MASQUERADE
}
up() {
ip netns add myvpn
ip -n myvpn addr add 127.0.0.1/8 dev lo
ip -n myvpn link set lo up
ip link add vpn0 type veth peer name vpn1 netns myvpn
ip link set vpn0 up
ip addr add 10.200.200.1/24 dev vpn0
ip -n myvpn addr add 10.200.200.2/24 dev vpn1
ip -n myvpn link set vpn1 up
ip -n myvpn route add default via 10.200.200.1 dev vpn1
iptables -A INPUT \! -i vpn0 -s 10.200.200.0/24 -j DROP
iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o $interface -j MASQUERADE
ip netns exec myvpn ping -c 10 8.8.8.8
}
sysctl -q net.ipv4.ip_forward=1
down
trap down EXIT
up
私のシステムでこのスクリプトを実行すると、次のようになります。
Cannot remove namespace file "/var/run/netns/myvpn": No such file or directory
Cannot find device "vpn0"
iptables: Bad rule (does a matching rule exist in that chain?).
iptables: Bad rule (does a matching rule exist in that chain?).
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=9.80 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=12.3 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=116 time=15.8 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=116 time=9.06 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=116 time=12.5 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=116 time=15.2 ms
64 bytes from 8.8.8.8: icmp_seq=7 ttl=116 time=8.27 ms
64 bytes from 8.8.8.8: icmp_seq=8 ttl=116 time=11.3 ms
64 bytes from 8.8.8.8: icmp_seq=9 ttl=116 time=14.8 ms
64 bytes from 8.8.8.8: icmp_seq=10 ttl=116 time=7.21 ms
--- 8.8.8.8 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9012ms
rtt min/avg/max/mdev = 7.211/11.621/15.819/2.871 ms