vif-qubes-nat.sh 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #!/bin/bash
  2. #set -x
  3. netvm_subnet=/24
  4. undetectable_netvm_ips=1
  5. netns="${vif}-nat"
  6. netvm_if="${vif}"
  7. netns_netvm_if="${vif}-p"
  8. netns_appvm_if="${vif}"
  9. function run
  10. {
  11. #echo "$@" >> /var/log/qubes-nat.log
  12. "$@"
  13. }
  14. function netns
  15. {
  16. run ip netns exec "$netns" "$@"
  17. }
  18. run ip addr flush dev "$netns_appvm_if"
  19. run ip netns delete "$netns" || :
  20. if test "$command" == online; then
  21. run ip netns add "$netns"
  22. run ip link set "$netns_appvm_if" netns "$netns"
  23. run ip link add "$netns_netvm_if" type veth peer name "$netvm_if"
  24. run ip link set "$netns_netvm_if" netns "$netns"
  25. netns ip6tables -t raw -I PREROUTING -j DROP
  26. netns ip6tables -P INPUT DROP
  27. netns ip6tables -P FORWARD DROP
  28. netns ip6tables -P OUTPUT DROP
  29. netns sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
  30. netns iptables -t raw -I PREROUTING -i "$netns_appvm_if" ! -s "$appvm_ip" -j DROP
  31. if test -n "$undetectable_netvm_ips"; then
  32. # prevent an AppVM connecting to its own ProxyVM IP because that makes the internal IPs detectable even with no firewall rules
  33. netns iptables -t raw -I PREROUTING -i "$netns_appvm_if" -d "$netvm_ip" -j DROP
  34. # same for the gateway/DNS IPs
  35. netns iptables -t raw -I PREROUTING -i "$netns_appvm_if" -d "$netvm_gw_ip" -j DROP
  36. netns iptables -t raw -I PREROUTING -i "$netns_appvm_if" -d "$netvm_dns2_ip" -j DROP
  37. fi
  38. netns iptables -t nat -I PREROUTING -i "$netns_netvm_if" -j DNAT --to-destination "$appvm_ip"
  39. netns iptables -t nat -I POSTROUTING -o "$netns_netvm_if" -j SNAT --to-source "$netvm_ip"
  40. netns iptables -t nat -I PREROUTING -i "$netns_appvm_if" -d "$appvm_gw_ip" -j DNAT --to-destination "$netvm_gw_ip"
  41. netns iptables -t nat -I POSTROUTING -o "$netns_appvm_if" -s "$netvm_gw_ip" -j SNAT --to-source "$appvm_gw_ip"
  42. if test -n "$appvm_dns2_ip"; then
  43. netns iptables -t nat -I PREROUTING -i "$netns_appvm_if" -d "$appvm_dns2_ip" -j DNAT --to-destination "$netvm_dns2_ip"
  44. netns iptables -t nat -I POSTROUTING -o "$netns_appvm_if" -s "$netvm_dns2_ip" -j SNAT --to-source "$appvm_dns2_ip"
  45. fi
  46. netns ip addr add "$netvm_ip$netvm_subnet" dev "$netns_netvm_if"
  47. netns ip addr add "$appvm_gw_ip" dev "$netns_appvm_if"
  48. netns ip link set "$netns_netvm_if" up
  49. netns ip link set "$netns_appvm_if" up
  50. netns ip route add "$appvm_ip" dev "$netns_appvm_if" src "$appvm_gw_ip"
  51. netns ip route add default via "$netvm_gw_ip" dev "$netns_netvm_if" src "$netvm_ip"
  52. #run ip addr add "$netvm_gw_ip" dev "$netvm_if"
  53. #run ip link set "$netvm_if" up
  54. #run ip route add "$netvm_ip" dev "$netvm_if" src "$netvm_gw_ip"
  55. fi