Place shrimp and 2 cups hot water in a bowl and soak for about 2 minutes.
Peel off and discard any shrimp shells. Place shrimp in another bowl with the remaining hot water. When there are no shells left, add the first 2 cups of water to the second bowl and set aside.
Heat oil in a large cast-iron skillet over high heat until hot and just short of smoking, about 3 minutes. Using a long-handled whisk or wooden spoon, gradually stir the flour into the hot oil, whisking or stirring constantly until smooth. Cook, stirring or whisking constantly, until roux is light medium brown, 2 to 3 minutes. Reduce heat to low and continue cooking until roux is medium brown, 1 to 2 minutes more, stirring constantly. Be very careful that it does not scorch or splash on your skin. Remove from heat and continue stirring until roux stops getting darker, about 3 minutes. Set aside.
In a heavy 6-quart skillet or Dutch oven, combine the 2 quarts water with the onions, peppers, celery, garlic, cayenne, black pepper, shrimp and 2 cups soaking water. Discard remaining soaking water.
Place pot over high heat and bring to a boil. Reduce heat and simmer about 25 minutes, stirring occasionally.
Add the roux by spoonfuls, blending each spoonful in before adding more.
Continue cooking about 45 minutes, stirring occasionally and skimming any fat that accumulates.
Add green onions and fish, increase heat to high, and cook just until the fish is cooked, about 10 minutes, stirring occasionally and skimming fat if necessary. Do not overcook the fish. Add salt if necessary.
To serve, divide the rice among 4 soup bowls and ladle the gumbo over it. Be sure that some of the shrimp and fish is in each serving.