IP คงที่สาธารณะสำหรับกล่องคนจรจัด


13

ฉันมีเซิร์ฟเวอร์ (Debian Squeeze) ที่มี 1 การ์ดอีเธอร์เน็ตและ 2 IP สาธารณะคงที่ (188.120.245.4 และ 188.120.244.5)

สิ่งที่ฉันต้องการ: ติดตั้งกล่องเสมือน (Ubuntu) ด้วยการเข้าถึงผ่าน IP แบบคงที่ (188.120.244.5)

สิ่งที่ฉันพยายาม:

  • config.vm.forward_port - ความคิดที่ดี: การตั้งค่าอินเทอร์เฟซ "eth1: 1" กับ 188.120.244.5 บนเครื่องโฮสต์และเพิ่มไปยังไฟล์ Vagrant "config.vm.forward_port = hmm .. ?"
  • config.vm.network: hostonly, "188.120.244.5" - ไม่ทำงาน สร้างอินเทอร์เฟซใหม่บนเครื่องโฮสต์ด้วย ip "188.120.244.1" แน่นอนว่า 188.120.244.1 IP ไม่ใช่ของฉันและฉันไม่สามารถเข้าถึงเซิร์ฟเวอร์ของฉันผ่าน IP นี้ได้
  • config.vm.network: bridged - ฉันสับสนว่ามันทำงานอย่างไร :)

สิ่งที่ฉันมีตอนนี้: ไม่ทำงานการกำหนดค่า

Debian-host-machine# cat Vagrantfile
Vagrant::Config.run do |config|
  config.vm.define :gitlab do |box_config|
    box_config.vm.box = "ubuntu"
    box_config.vm.host_name = "ubuntu"
    box_config.vm.network :bridged
    box_config.vm.network :hostonly, "188.120.244.5", :auto_config => false
  end
end

Debian-host-machine# ifconfig
eth1      Link encap:Ethernet  HWaddr 00:15:17:69:71:bb  
          inet addr:188.120.245.4  Bcast:188.120.247.255  Mask:255.255.248.0

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0

vboxnet0  Link encap:Ethernet  HWaddr 0a:00:27:00:00:00  
          inet addr:188.120.244.1  Bcast:188.120.246.255  Mask:255.255.255.0

Ubuntu-virtual-machine# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:ee:8d:0c  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0

eth1      Link encap:Ethernet  HWaddr 08:00:27:45:71:87  

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0

ฉันจะเข้าถึงกล่องเสมือนผ่าน IP แบบคงที่สาธารณะจากเครือข่ายได้อย่างไร

ฉันใช้ Oracle VM VirtualBox Manager 4.1.18 และ Vagrant เวอร์ชัน 1.0.3

ขอบคุณล่วงหน้าสำหรับความคิดเห็นของคุณ


ฉันระวังที่จะใช้คนจรจัดกับ IP ที่เข้าถึงได้จากภายนอกและโดยเฉพาะกับผู้ให้บริการกล่องเสมือน stackoverflow.com/a/16919803/2109800
mc0e

คำตอบ:


14

ตั้งแต่รุ่น 1.3.0:

Static IP can now be set on public networks. [GH-1745]

คุณต้องใส่การกำหนดค่านี้ใน Vagrantfile ของคุณ(เอกสารประกอบ) :

config.vm.network "public_network", ip: "192.168.0.200"

สิ่งที่คนจรจัดเป็นสิ่งที่ดีจริงๆ :-)


ดังนั้นฉันสังเกตเห็นว่าเซิร์ฟเวอร์ DHCP ของฉันดูเหมือนจะไม่คิดว่ากล่องคนจรจัดของฉันนั้นอยู่ที่ ip: \
ThorSummoner

2

หลังจากสองสัปดาห์ฉันแก้ไขคำถามของฉันด้วยวิธีนี้:

Cookbook สร้าง Vagrantfile จากเทมเพลต:

Vagrant::Config.run do |config|
  config.vm.define :gitlab do |box_config|
    box_config.vm.box = "mybox"
    box_config.vm.host_name = "mybox"
    box_config.vm.forward_port 80, 4567
    box_config.vm.forward_port 22, 2222
    box_config.vm.network :hostonly, "192.168.5.10"
  end
end

rebuild-iptables ต้องการสร้างและใช้กฎ iptables:

# /etc/iptables/general
*filter
:INPUT ACCEPT [0,0]
:FORWARD ACCEPT [0,0]
:OUTPUT ACCEPT [0,0]
# Vagrand boxes forwarding ports
-A FORWARD -p tcp -d 192.168.5.10 --dport 80 -j ACCEPT
-A FORWARD -p tcp -d 192.168.5.10 --dport 22 -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [0,0]
:POSTROUTING ACCEPT [0,0]
:OUTPUT ACCEPT [0,0]
# Nat all traffic to vagrant boxes
# For example, my vagrant box public static ip is 8.8.8.8
-A PREROUTING -d 8.8.8.8 -p tcp -j DNAT --to-destination 192.168.5.10
-A POSTROUTING -j MASQUERADE
COMMIT

และ:

echo '1' > /proc/sys/net/ipv4/ip_forward

ตอนนี้ฉันสามารถติดตั้งแอปพลิเคชั่นลงในกล่องและเชื่อมต่อกับพวกเขาผ่านไอพีสแตติกสาธารณะโดยไม่ต้องตั้งค่า "port_forwarding" (เช่นเดียวกับ VPS)


0

สิ่งที่คุณต้องการจริงๆคืออินเตอร์เฟสที่เชื่อมต่อกับ IP แบบคงที่ น่าเสียดายที่คนจรจัดยังไม่สนับสนุนสิ่งนี้ (ดูการสนทนาที่นี่ )

ก่อนอื่นให้ตั้งค่า box_config.vm.network: bridged ตามที่คุณต้องการ virtualbox เพื่อสร้างส่วนต่อประสาน bridged และคุณสามารถลบ box_config.vm.network: hostonly

คุณสามารถใช้การจัดสรรเชลล์เพื่อกำหนดค่าเครือข่ายอีกครั้งด้วย IP ของคุณ แต่คุณไม่สามารถแก้ไขไฟล์ / etc / network / interfaces มิฉะนั้น VM จะไม่สามารถสำรองข้อมูลได้หากคุณหยุดเล่นคนจรจัด และกำหนดค่าอินเทอร์เฟซเครือข่ายใหม่และจะตายหากคุณแก้ไขไฟล์นั้น)
ดังนั้นทางเลือกคือการสร้างสคริปต์ใน /etc/network/if-up.d/ ที่ตั้งค่า IP สำหรับอินเตอร์เฟสใหม่ ไม่เหมาะ แต่ฉันยังไม่ได้คิดวิธีแก้ปัญหาที่ดีกว่านี้!


ดูส่วนที่เกี่ยวข้องของการกำหนดค่าด้านล่าง ในสคริปต์ทุบตีคุณควรตั้งค่า IP / netmask เกตเวย์และ DNS (และหมายเลขอินเทอร์เฟซหากคุณแตกต่างกันควรเป็น eth1 แม้ว่าคุณเพิ่งจะได้ตั้งค่าบริดจ์ใน Vagrantfile)
ดังนั้นเป็นครั้งแรกที่คุณทำคนพเนจรและสร้าง VM มันจะสร้างสคริปต์ /etc/network/if-up.d/custom-network-config ที่ตั้งค่า IP กำหนดเส้นทางและรีสตาร์ท apache (คุณจะต้อง แก้ไขสิ่งนี้หากคุณใช้บริการอื่น ๆ ที่ต้องพึ่งพาการกำหนดค่าเครือข่าย) และตั้งค่า DNS
ถ้าคุณทำคนพเนจรอีกครั้งเมื่อ VM มีอยู่แล้ว (เช่นหลังจากทำคนพเนจรหยุดชะงัก) สิ่งที่ทำก็คือรีสตาร์ทอินเทอร์เฟซเครือข่ายเพื่อให้สคริปต์ทำงานและมีการกำหนดค่าอินเทอร์เฟซ (ด้วยเหตุผลบางอย่างฉันพบว่าสคริปต์ไม่ได้ถูกเตะ ปิดเมื่อเปิด VM และอินเตอร์เฟสเริ่มต้น - ไม่แน่ใจว่าทำไม)

Vagrantfile

config.vm.network :bridged
config.vm.provision :shell, :path => "vagrant-setup.sh"

vagrant-setup.sh

#!/bin/bash

ip="188.120.244.5/24"
gateway=""
dns="8.8.8.8"


#####################
# NEW VM
#####################
if [ ! -f /etc/network/if-up.d/custom-network-config ]; then

cat >/etc/network/if-up.d/custom-network-config <<EOL
#!/bin/bash
if [ "\$IFACE" != "eth1" ]; then
exit 0
fi
ifconfig eth1 down
ifconfig eth1 ${ip} up
route del default
route add default gw ${gateway} dev eth1
service apache2 restart
EOL

cat >/etc/resolv.conf <<EOL
nameserver ${dns}
EOL

chmod +x /etc/network/if-up.d/custom-network-config
/etc/init.d/networking restart


#####################
# EXISTING VM
#####################
else

/etc/init.d/networking restart

fi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.